我有一个Pandas DataFrame,我想根据分组在列[‘ID’]中的原始DataFrame的[‘val’]列中的平均值创建两个新的DataFrame.请参见下面的内容:

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’]列中的值.

谢谢

推荐答案

在"下方"/"上方"DFS上使用df_avg['Val'] < 55条件作为过滤/分割的掩码:

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

Python-3.x相关问答推荐

在Python中从mySQL获取多行

Gekko优化超出了方程式的界限(由于某种原因,会产生变量)

将列表项的极列水平分解为新列

如何将参数/值从测试方法传递给pytest的fixture函数?

为什么我在BLE中的广告代码在发送包裹之间需要大约1秒

为什么 tkinter 在 tkinter 窗口外计算鼠标事件?

Python-Django 设置 Pandas DataFrame 的多索引不会分组/合并最后一个索引

如何将值映射到具有上限和下限的新列

使用Python按照其组/ID的紧密值的递增顺序映射数据框的两列

「Python Pandas」多级索引列和行匹配,如果列和行名称相似,则排除这些单元格中的值添加

将数据框中的值与另一个数据框中的多列进行比较,以获取条目以有效方式匹配的列表列表

为列表列表中的每个列表插入 str 到 index[0] 中. Python

有没有办法使用重采样矢量化添加缺失的月份?

XPATH:使用 .find_elements_by_xpath 为未知数量的 xpath 输入值

Pandas数据单调行为

Python:遍历子列表

Tensorflow:ImportError:libcudnn.so.7:无法打开共享对象文件:没有这样的文件或目录

AttributeError:LinearRegression 对象没有属性coef_

带有自定义标头的 urllib.urlretrieve

新项目:Python 2 还是 Python 3?