首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用groupby agg()对python大熊猫加权平均

使用groupby agg()对python大熊猫加权平均
EN

Stack Overflow用户
提问于 2022-04-15 21:31:27
回答 3查看 274关注 0票数 4

我想通过agg()在熊猫群中使用自定义函数。我知道可以选择使用应用,但是我想要做几个聚合。下面是我试图为加权平均值工作的测试代码。

Python代码

代码语言:javascript
复制
import pandas as pd
import numpy as np

def weighted_avg(df, values, weights):
    '''To calculate a weighted average in Pandas. Demo see https://www.statology.org/pandas-weighted-average/
    Example: df.groupby('Group Names').apply(w_avg, 'Results', 'AFY')'''
    v = df[values]
    w = df[weights]
    return (v * w).sum() / w.sum()

# below creates a dataframe.
dfr = pd.DataFrame(np.random.randint(1,50,size=(4,4)), columns=list('ABCD'))
dfr['group'] = [1, 1, 0, 1]

print(dfr)
dfr = dfr.groupby('group').agg({'A':'mean', 'B':'sum',
                    'C': lambda x: weighted_avg(dfr, 'D', 'C')}).reset_index()
print(dfr)

结果-输出

代码语言:javascript
复制
    A   B   C   D  group
0   5   2  17  38      1
1  35  30  22  32      1
2  15  18  16  11      0
3  46   6  20  34      1
    group     A      B       C
0      0  15.000000  18  29.413333
1      1  28.666667  38  29.413333

问题:加权平均值返回整个表的值,而不是“group”列的值。我怎样才能得到按组工作的加权平均数?

我确实尝试过将groupby像在这里显示一样放置在函数中,但没有成功。谢谢你看一看。

EN

Stack Overflow用户

发布于 2022-04-15 21:41:35

你写过lambda x: weighted_avg(dfr, 'D', 'C')的地方

这将计算dfr上的加权平均值,即整个表。

如果您将其更改为lambda group: weighted_avg(group, "D", "C")

那我觉得也许能行。

(我已将lambda变量的名称更改为group,因为x描述性不强)

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71889136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档