Pandas:聚合和/或应用不适用于用户定义的函数

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

我试图从 dt 获取加权平均值,但 apply 和 agg 似乎都不起作用,并且我的代码返回以下错误“numpy.float64”对象不可调用

我有以下 df

df = pd.DataFrame([['RETIRO', 65, 1, 10.7],

                   ['SAN NICOLAS',116, 1, 23.2],

                   ['RETIRO', 101, 2, 28.7],

                   ['FLORES', 136 , 2, 23.5]],

                  columns=['BARRIO', 'HOGARES', 'COMUNA', 'NSE'])

我定义函数

def avg_w(dt):
    return np.average(a = dt.NSE, weights = dt.HOGARES)

现在将其应用到我的 df 中,

df.loc[:,['COMUNA','NSE','HOGARES']].groupby(['COMUNA']).apply(avg_w(df))

然后它返回 “numpy.float64”对象不可调用

我也尝试了类似于herehere

中的建议

我改变了功能,

def avg_w2(dt):
    return pd.Series({'avg_w2': np.average(a = dt.NSE, weights = dt.HOGARES)})

然后申请

df.loc[:,['COMUNA','NSE','HOGARES']].groupby(['COMUNA']).apply({'avgw': [avg_w2(dt)]})

但是也没有成功。代码返回 TypeError: unhashable type: 'dict'

该函数可以单独工作,但当我将其传递给 apply 时,有些东西不起作用(或聚合,我尝试了它们两个)

我期望获得每个 COMUNA 由 HOGARES 加权的 NSE 平均值。

python pandas aggregate apply
1个回答
0
投票

当您将函数传递给 apply 时,您正在调用函数,您应该将函数作为对象传递:

df.loc[:,['COMUNA','NSE','HOGARES']].groupby(['COMUNA']).apply(avg_w)

这可能无法解决您的所有问题,但应该可以解决您的第一个问题。

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