Pandas/numpy加权平均零分误差

gc0ot86w  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(121)

创建一个lambda函数来计算加权平均值并将其发送到字典。

wm = lambda x: np.average(x, weights=df.loc[x.index, 'WEIGHTS'])

# Define a dictionary with the functions to apply for a given column:
f = {'DRESS_AMT': 'max', 
     'FACE_AMT': 'sum',
     'Other_AMT': {'weighted_mean' : wm}}

# Groupby and aggregate with dictionary:
df2=df.groupby(['ID','COL1'], as_index=False).agg(f)

这段代码可以工作,但是如果权重之和为0ZeroDivisionError,则加权平均lambda函数失败。在这些情况下,我希望输出'Other_AMT'为0。
我读了一个关于使用np.ma.average(屏蔽平均)的文档,但不明白如何实现它

gev0vcfq

gev0vcfq1#

这还不够吗?

def wm(x):
    try: 
        return np.average(x, weights=df.loc[x.index, 'WEIGHTS'])
    except ZeroDivisionError:
        return 0

f = {'DRESS_AMT': 'max', 
     'FACE_AMT': 'sum',
     'Other_AMT': {'weighted_mean' : wm} }

df2=df.groupby(['ID','COL1'], as_index=False).agg(f)
h79rfbju

h79rfbju2#

可以使用np.ma.average(x, weights=df.loc[x.index, 'WEIGHTS'])

相关问题