python-3.x 根据按不同列中的值分组的平均值划分DataFrame

xqnpmsa8  于 2023-03-24  发布在  Python
关注(0)|答案(1)|浏览(94)

我有一个pandas DataFrame,我想根据原始DataFrame的['Val']列中的平均值创建两个新的DataFrame,并将列['ID']分组。如下所示:

dict_ = {'ID': ['abc', 'def', 'def', 'abc'], 'Val' : [1, 57, 65, 9]}
df = pd.DataFrame.from_dict(dict_)
df_avg = df.groupby('ID', as_index=False)['Val'].mean()
low = df['ID'] == df_avg.loc[df_avg['Val'] <  55]['ID']

下面的代码执行第一部分

df_avg = df.groupby('ID', as_index=False)['Val'].mean()

然后,我需要两个新的DataFrame,其中第一个包含第一个DataFrame中平均值低于阈值的['ID']行,其他包含平均值高于阈值的['ID']行。

low = df['ID'] == df_avg.loc[df_avg['Price'] <  55]['ID']

这是我试图做的逻辑,但提出:ValueError只能比较标签相同的Series对象。
我不关心标签,我只想匹配['ID']列中的值。
谢谢

a11xaf1n

a11xaf1n1#

使用df_avg['Val'] < 55条件作为“低于”/“高于”dfs的过滤/除法掩码:

m = df_avg['Val'] < 55
low_ids = df[df['ID'].isin(df_avg[m]['ID'])]
up_ids = df[df['ID'].isin(df_avg[~m]['ID'])]
print(low_ids)
print(up_ids)
ID  Val
0  abc    1
3  abc    9
    ID  Val
1  def   57
2  def   65

相关问题