我正在try 从DT获取加权平均值,但Apply和AGG似乎都不起作用,并且我的代码返回以下错误‘numpy.flat64’对象不可调用

我有以下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.flat64"对象不可调用

我也try 了与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:unhasable type:‘dict’

该函数单独工作,但当我将其传递给应用程序(或聚合,我try 两者都使用)时,有些东西不工作

我希望获得每个科穆纳的NSE按猪加权的平均值.

推荐答案

看起来你想要的是以下内容:

df = df.iloc[:, 1:].groupby(by="COMUNA").apply(
        lambda grp : np.average(a=grp['NSE'], weights=grp["HOGARES"])
    )

这将导致以下的嵌套:

COMUNA
1    18.711050
2    25.716034

Note:你可以使用一个函数而不是lambda表达式来将它应用到每个组,但是你需要传递函数名本身,即df.apply(avg_w2) NOT df.apply(avg_w2(df))

Python相关问答推荐

使用Python OpenCV的文本检测分割

customtkinter中使用的这个小部件的名称是什么

具有2D功能的Python十六进制图

基本链合同的地址是如何计算的?

Python Hashicorp Vault库hvac创建新的秘密版本,但从先前版本中删除了密钥

numba jitClass,记录类型为字符串

如何根据参数推断对象的返回类型?

如何标记Spacy中不包含特定符号的单词?

Python库:可选地支持numpy类型,而不依赖于numpy

如何获取TFIDF Transformer中的值?

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

Python虚拟环境的轻量级使用

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

如何从数据库上传数据到html?

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

计算天数

如何更新pandas DataFrame上列标题的de值?

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

python sklearn ValueError:使用序列设置数组元素