gpt4 book ai didi

Python 按元素 AVERAGEIF 相当于 Excel

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

我有一个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/

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