在p组后过滤的同时汇总Pandas的分组数据

2024-09-30 05:32:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在准确(或至少是最优雅的)步骤上结对了熊猫的一些数据。假设我有一个数据帧看起来像这样-

system    sub_system     datatype     datacount
a         1              foo          111
a         1              bar          222
a         1              baz          333
a         2              foo          444
a         2              baz          555
b         1              foo          667
b         3              baz          777

我想在按系统和子系统分组时得到数据计数的总和,只要数据类型不等于bar,然后将这些总数放回原始数据帧中。在

如果我尝试非_bar_totals=df[数据类型!='bar'].groupby(['system','sub\u system']).agg(np.总和),它会让我得到一些像-

^{pr2}$

但现在我不知道如何将该计数值推回到原始数据帧中。正确的语法是什么让这些计数被推回到原始数据帧中?最终产品应该看起来像-

system    sub_system     datatype     datacount    non_bar_total
a         1              foo          111          444
a         1              bar          222          444
a         1              baz          333          444
a         2              foo          444          999
a         2              baz          555          999
b         1              foo          667          667
b         3              baz          777          777

谢谢,我知道这很简单,我只是找不到合适的关键字来找到一个例子。在


Tags: 数据原始数据foo系统bar步骤bazsystem
1条回答
网友
1楼 · 发布于 2024-09-30 05:32:50

您可以使用apply函数的功能:

def conditional_sum(grp):
    grp['non_bar_total'] = grp[grp.datatype != 'bar']['datacount'].sum()
    return grp

df.groupby(['system', 'sub_system']).apply(conditional_sum)

system  sub_system  datatype    datacount   non_bar_total
0    a   1   foo     111     444
1    a   1   bar     222     444
2    a   1   baz     333     444
3    a   2   foo     444     999
4    a   2   baz     555     999
5    b   1   foo     667     667
6    b   3   baz     777     777

相关问题 更多 >

    热门问题