gpt4 book ai didi

python - Pandas 中的分组、加权、列平均值

转载 作者:太空狗 更新时间:2023-10-30 01:10:53 28 4
gpt4 key购买 nike

所以我在 Pandas DataFrame 中有两个值列和两个权重列,我想生成第三列,它是这两列的分组依据、加权平均值。

因此:

df = pd.DataFrame({'category':['a','a','b','b'],
'var1':np.random.randint(0,100,4),
'var2':np.random.randint(0,100,4),
'weights1':np.random.random(4),
'weights2':np.random.random(4)})
df
category var1 var2 weights1 weights2
0 a 84 45 0.955234 0.729862
1 a 49 5 0.225470 0.159662
2 b 77 95 0.957212 0.991960
3 b 27 65 0.491877 0.195680

我想完成:

df
category var1 var2 weights1 weights2 average
0 a 84 45 0.955234 0.729862 67.108023
1 a 49 5 0.225470 0.159662 30.759124
2 b 77 95 0.957212 0.991960 86.160443
3 b 27 65 0.491877 0.195680 37.814851

我已经用这样的算术运算符完成了这个:

df['average'] = df.groupby('category', group_keys=False) \
.apply(lambda g: (g.weights1 * g.var1 + g.weights2 * g.var2) / (g.weights1 + g.weights2))

但我想将其概括为使用 numpy.average,因此我可以采用 3 列或更多列的加权平均值。

我正在尝试类似的方法,但它似乎不起作用:

df['average'] = df.groupby('category', group_keys=False) \
.apply(lambda g: np.average([g.var1, g.var2], axis=0, weights=[g.weights1, g.weights2]))

回归

TypeError: incompatible index of inserted column with frame index

谁能帮我做这个?

最佳答案

我什至认为您在这里不需要groupby。请注意,这与 apply + lambda 的输出匹配。

试试这个:

col=df.drop('category',1)
s=col.groupby(col.columns.str.findall(r'\d+').str[0],axis=1).prod().sum(1)
s/df.filter(like='weight').sum(1)
Out[33]:
0 67.108014
1 30.759168
2 86.160444
3 37.814871
dtype: float64

关于python - Pandas 中的分组、加权、列平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55642505/

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