计算函数中 pandas df 的weighted_average

问题描述 投票:0回答:1

我有一个函数,在这个函数中我想计算列

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)

python pandas dataframe group-by aggregate
1个回答
0
投票

一个可能的解决方案(将

amount
列作为权重列):

(df2['other_col'].mul(df2['amount'])).sum() / df2['amount'].sum()

产生

0.49514824797843665

© www.soinside.com 2019 - 2024. All rights reserved.