gpt4 book ai didi

python - 将加权平均函数应用于数据框而不对其进行分组,就好像它是一个单独的组一样

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:37 24 4
gpt4 key购买 nike

我想应用一个函数来计算类似于数据框所有元素的加权平均绝对偏差的东西。

我已经有了一个解决方案,但它对我来说似乎很古怪,因为我必须将 groupby 与始终返回相同值的 lambda 函数一起使用:

def mdft(group):
d = np.abs(my_target - group['column1'])
w = group['weight_column']
return (d * w).sum() / w.sum()
df.groupby(lambda x: True).apply(mdft)

如果我不使用 groupby,pandas 会将此函数应用于数据框的每一行,这不是我的目标。

是否可以在没有 groupby 的情况下做同样的事情?

最佳答案

一些示例数据:

import numpy as np
import pandas as pd

my_target = 25
df = pd.DataFrame({'column1': np.random.normal(25, 3, 20),
'weight_column': np.random.random_integers(1, 10, 20)})

df
Out[4]:
column1 weight_column
0 23.147356 6
1 24.361162 5
2 25.665186 4
3 20.059039 1
4 28.573390 5
5 26.543743 1
6 23.177928 2
# etc.

好的,所以在您的帖子中,当您说“如果我不使用 groupby,pandas 会将此函数应用于数据帧的每一行”时,这不一定是正确的。您应该尝试阅读对 numpy 数组的操作是“矢量化”的方式。因此,就像人们在评论中指出的那样,您的功能无需执行 groupby 即可正常工作:

mdft(df)
Out[9]: 1.9429828309434094

也就是说,您本来可以避免首先编写该函数,因为 numpy 可以为您进行加权处理:

np.average(np.abs(my_target - df['column1']), weights=df['weight_column'])
Out[8]: 1.9429828309434098

关于python - 将加权平均函数应用于数据框而不对其进行分组,就好像它是一个单独的组一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969430/

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