我有一个大致像这样的数据框:
category value
1 A 2
2 B 5
3 A 3
4 A 2
5 B 1
现在我想添加一个列,告诉我当前值是高于还是低于其类别中的中值 ,但我不知道如何操作。对于总平均值,我可以 df["above_mean"] = (df["value"] > df["value"].mean())
,但是我如何将这些值与各自类别的平均值?
这就是我要实现的目标:
category value above_mean
1 A 2 False
2 B 50 True
3 A 3 True
4 A 2 False
5 B 10 True
最佳答案
我认为你需要:
print (df.groupby('category')['value'].mean())
category
A 2.333333
B 3.000000
Name: value, dtype: float64
df['above_mean'] = df.groupby('category')['value'].apply(lambda x: x > x.mean())
print (df)
category value above_mean
1 A 2 False
2 B 5 True
3 A 3 True
4 A 2 False
5 B 1 False
替代解决方案 transform
并与 gt
进行比较(>
):
print (df.groupby('category')['value'].transform('mean'))
1 2.333333
2 3.000000
3 2.333333
4 2.333333
5 3.000000
Name: value, dtype: float64
df['above_mean'] = df['value'].gt(df.groupby('category')['value'].transform('mean'))
#same as
#df['above_mean'] = df['value'] > df.groupby('category')['value'].transform('mean')
print (df)
category value above_mean
1 A 2 False
2 B 5 True
3 A 3 True
4 A 2 False
5 B 1 False
关于python - 在 Pandas 中按类别比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43474584/