我有一个函数,在这个函数中我想计算列
other_column
的加权平均值(用列amount
加权)。如果我在函数中没有这个,那么它会起作用,但是像这样我不知道如何传递数据帧?我也收到错误:NameError: name 'df1' is not defined
。
def weighted_mean(x):
try:
return np.average(x, weights=df1.loc[x.index, 'amount']) > 0.5
except ZeroDivisionError:
return 0
def some_function(df1=None):
df1 = df1.groupby('id').agg(xx=('amount', lambda x: x.sum() > 100),
yy=('other_col', weighted_mean)).reset_index()
return df1
df2 = pd.DataFrame({'id':[1,1,2,2,3], 'amount':[10, 200, 1, 10, 150], 'other_col':[0.1, 0.6, 0.7, 0.2, 0.4]})
df2 = some_function(df1=df2)
一个可能的解决方案(将
amount
列作为权重列):
(df2['other_col'].mul(df2['amount'])).sum() / df2['amount'].sum()
产生
0.49514824797843665
。