在熊猫中按类别比较

时间:2017-04-18 14:10:48

标签: python pandas

我的数据框大致如下:

   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

1 个答案:

答案 0 :(得分:7)

我认为你需要:

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