gpt4 book ai didi

python - 有没有一种方法可以按元素过滤 pandas groupby 结果?

转载 作者:行者123 更新时间:2023-12-01 07:02:00 25 4
gpt4 key购买 nike

我有以下数据框:

idx val1
1 1
1 2
1 3
2 4
2 5
2 6

我想执行以下操作:

返回 val1 列中大于组平均值的所有值(由 groupby 返回的组)

例如第 1 组(idx = 1)的平均值 = 2,第二组的平均值 = 5。因此,我想得到以下结果:第 1 组为 2,3 (2 >= 2, 3>= 2),第 2 组为 5,6。

我尝试了以下方法:

df.groupby('idx').filter(lambda x: x['val'] >= np.mean(x['val1']))

有没有办法通过使用单个分组和单个过滤器方法来做到这一点?

最佳答案

这里filtration用于通过某个标量删除组的所有值,例如2:

df1 = df.groupby('idx').filter(lambda x: x['val1'].mean() > 2)
print (df1)
idx val1
3 2 4
4 2 5
5 2 6

但是,如果想要按每个组的 mean 删除行,则使用 GroupBy.transform使用 mean 返回 Series ,其大小与原始 df 相同,并按 boolean indexing 进行过滤:

df2 = df[df['val1'] >= df.groupby('idx')['val1'].transform('mean')]
print (df2)
idx val1
1 1 2
2 1 3
4 2 5
5 2 6

详细信息:

print (df.groupby('idx')['val1'].transform('mean'))
0 2
1 2
2 2
3 5
4 5
5 5
Name: val1, dtype: int64
<小时/>
print (df['val1'] >= df.groupby('idx')['val1'].transform('mean'))
0 False
1 True
2 True
3 False
4 True
5 True
Name: val1, dtype: bool

关于python - 有没有一种方法可以按元素过滤 pandas groupby 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58592806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com