我试图从 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”对象不可调用
中的建议我改变了功能,
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 平均值。
当您将函数传递给 apply 时,您正在调用函数,您应该将函数作为对象传递:
df.loc[:,['COMUNA','NSE','HOGARES']].groupby(['COMUNA']).apply(avg_w)
这可能无法解决您的所有问题,但应该可以解决您的第一个问题。