Pandas / numpy加权平均值ZeroDivisionError

时间:2018-04-16 19:15:24

标签: python pandas numpy divide-by-zero weighted-average

创建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)

此代码有效,但如果权重加起来为ZeroDivisionError,加权平均lambda函数将失败。在这些情况下,我想要输出' Other_AMT'只是0。

我阅读了一篇关于使用np.ma.average(掩盖平均值)的文档,但无法理解如何实现它

1 个答案:

答案 0 :(得分:2)

这不够吗?

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)