Python 按元素 AVERAGEIF 相当于 Excel

标签 python pandas aggregate

我有一个2darray,对于每一行,我想计算同一键的列数字中的行平均值(在此案例,key1 & key2。这是我的问题的简单表示,下面是期望的结果:

>>> df
Out[3]:
  key1 key2  number
0    a    c     100
1    b    d     200
2    a    a     150
3    a    a     200
>>> res
100
200
175 # (150+200)/2
175 # (150+200)/2

我知道pandas中有诸如grouby之类的聚合方法,按照[1]中的建议和 [2] ,但 groupby 方法将提供唯一的聚合,而我打算将它们转换到每一行。

我当前的工作流程如下:

  1. 使用 groupby('foo').mean() 获取聚合
  2. 然后,对于每一行,将行的映射到聚合。

例如:

>>> K = df.key1 + df.key2

>>> K
Out[4]:
0    ac
1    bd
2    aa
3    aa
dtype: object

>>> agg = df2.groupby(K).mean()

>>> agg
Out[5]:
    number
aa     175
ac     100
bd     200

>>> avgif = []
... agg = agg.squeeze() # groupby results shape in (n, 1)
... for k in K:
...     avgif.append(agg.at[K])

>>> avgif
Out[6]:
[100, 200, 175, 175]

这工作正常,但我真正的问题是行可能非常多,可能高达 200k。

因此,如果有人能分享任何建议,我会很高兴。谢谢!

最佳答案

我认为需要GroupBy.transform按两列:

df['new'] = df.groupby(['key1','key2'])['number'].transform('mean')
print (df)
  key1 key2  number  new
0    a    c     100  100
1    b    d     200  200
2    a    a     150  175
3    a    a     200  175

工作也改变了您的解决方案,但建议在 _ 之间使用分隔符:

K = df.key1 + '_' + df.key2
df['new'] = df.groupby(K)['number'].transform('mean')

关于Python 按元素 AVERAGEIF 相当于 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50501160/

相关文章:

python - 使用 django 创建 gtalk 类型的应用程序

Python,any()方法进行数据分析

python - 加载索引具有冗余列的 parquet 文件时出现 pyarrow 问题

python - 值错误: multiclass format is not supported

mysql - 如何将算术运算应用于 MySQL 中的聚合列?

r - 在用户定义的函数中使用 Dplyr 来汇总数据然后绘制它

python - 为什么 Python 中列表有 __reverse__() 特殊方法而元组没有?

python - 获取范围内至少出现 1 次 7 的数字数量

python - 总结 Pandas DataFrame 中的列值

SQL 服务器 : get max value between a range of values with additional data