python - 在 Pandas 中按类别比较

标签 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

最佳答案

我认为你需要:

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/

相关文章:

javascript - 使用自定义 Javascript 绑定(bind)在 Python 中嵌入 Gecko

python-3.x - plotly 有办法将 x 轴上的日期转换为一周中的某一天吗?

python - 从列中的行中删除 '[]' 和 '()'

python - 如何在订阅 channel 之前将消息发布到 Redis

python - pandas groupby 以一列为条件来填充另一列

带有 GUI 的 Python Youtube 下载器

python - 使用 django 和 AngularJS 使用 JWT 登录所需的装饰器

python - 如何将一组相同的 DataFrame 组合(合并)成一个?

python - 比较两个数据帧并出现错误

python - 将返回的元组分配给数组的不同列