熊猫:设置列等于另一列的分组总和[重复]

Posted

技术标签:

【中文标题】熊猫:设置列等于另一列的分组总和[重复]【英文标题】:Pandas: set column equal to grouped sum of another column [duplicate] 【发布时间】:2016-12-16 14:57:56 【问题描述】:

我有一个熊猫数据框如下:

   variable        Total_Beneficiaries  gender_text age_group
0   MC_OLD_18>F>5       1534    Female  5 - 18
1   MC_OLD_18>M>5       1651    Male    5 - 18
2   MC_OLD_F>0<=1       192     Female  0 - 1
3   MC_OLD_F>18         2079    Female  18 - 60
4   MC_OLD_F>=60        171     Female  Over 60
5   MC_OLD_F_Child<5    593     Female  1 - 5
6   MC_OLD_M>0<=1       264     Male    0 - 1
7   MC_OLD_M>18         1892    Male    18 - 60
8   MC_OLD_M>=60        106     Male    Over 60
9   MC_OLD_M_Child<5    602     Male    1 - 5

我想添加一个列age_group_totals,它将是每个age groupTotal_Beneficiaries 的总和。所以前两行的值是3185

到目前为止,我一直在通过创建一个带有总和的新数据框并按如下方式合并回原始数据框来做到这一点:

total_by_age = izmir_agg[['age_group','Total_Beneficiaries']].groupby('age_group').agg('Total_Beneficiaries':np.sum).reset_index().rename(columns='Total_Beneficiaries':'age_group_totals')
izmir_agg = izmir_agg.merge(total_by_age,how='left',on='age_group')

这看起来很笨拙,我想知道是否有一种方法可以更直接地添加此列,而无需创建单独的数据框。我试过这个:

izmir_agg['age_group_totals'] = izmir_agg.groupby('age_group')['Total_Beneficiaries'].sum().tolist()

但它不起作用,因为它返回一个长度错误的列表。有关如何一步完成此操作的任何提示?

【问题讨论】:

【参考方案1】:

试试:

izmir_agg['agg_totals'] = izmir_agg.groupby('age_group').Total_Beneficiaries.transform('sum')
izmir_agg

【讨论】:

以上是关于熊猫:设置列等于另一列的分组总和[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将查询分组为 3 列,并在 Apex Oracle 中显示另一列的总和

根据由另一列分组的不同列的最大值获取值[重复]

将一列的多个结果行连接成一个,按另一列分组[重复]

如何在 PySpark 中进行分组并查找列的唯一项目 [重复]

如何按一列的最大值获取SQL行,按另一列分组

熊猫数据框列的分组和计数