【问题标题】:Grouping Multiple columns and sum of count in pandas df在熊猫df中对多列和计数总和进行分组
【发布时间】:2017-05-01 03:14:18
【问题描述】:

我在 pandas df 中有一张桌子

 master_id    pidx   pidy   flag   count
    xxx        a      b       A      10
    xxx        a      c       A      20
    xxx        a      d       A      30
    xxx        b      d       A      40
    xxx        a      c       C      50
    xxx        a      c       C      60
    xxx        x      y       C      70
    xxx        x      y       C      80

我想对多列进行分组,并对计数求和,而与标志无关。

 xxx  a    c   A   20
 xxx  a    c   C   50
 xxx  a    c   C   60

最终输出应该是

 xxx  a   c   A  130

决赛桌应该是

 master_id   pidx   pidy   flag   count
    xxx        a      b       A      10
    xxx        a      c       A      130
    xxx        a      d       A      30
    xxx        b      d       A      40
    xxx        x      y       C      150

【问题讨论】:

    标签: python pandas group-by sum aggregate


    【解决方案1】:

    我认为您需要 groupbyagg - flag 列由 first 聚合,count 列由 sum 聚合:

    df = df.groupby(['pidx','pidy']).agg({'flag':'first', 'count':'sum'}).reset_index()
    print (df)
      pidx pidy  count flag
    0    a    b     10    A
    1    a    c    130    A
    2    a    d     30    A
    3    b    d     40    A
    4    x    y    150    C
    

    因为如果pidxpidyflag 使用groupby,输出是不同的:

    df = df.groupby(['pidx','pidy','flag'], as_index=False)['count'].sum()
    print (df)
      pidx pidy flag  count
    0    a    b    A     10
    1    a    c    A     20
    2    a    c    C    110
    3    a    d    A     30
    4    b    d    A     40
    5    x    y    C    150
    

    【讨论】:

    • 您的代码有效,但假设我还有一列说 master_id,那么我无法在 df.groupby(['master_id','pidx','pidy']) 中添加该列,请参阅我用另一列编辑了我的 df。
    • 我把leafID放在agg函数中,它似乎可以工作,df = df.groupby(['pidx','pidy']).agg({'leafId':'first','flag':'first', 'count':'sum'}).reset_index()但它是正确的方法吗?
    • 这取决于你需要什么。如果需要按列 pydx 和 pidy 分组并获取列 leafId 和 flag 的第一行,并对列数中的所有行求和,您是对的。
    • 我认为最好的方法是通过更改leafId 中的值和小数据样本中的标志来测试它,并在需要时对其进行测试。 (对不起,我现在只在家里打电话,所以不容易接听。)
    • 我认为最好的测试是这个样本print (pd.DataFrame({'count': [10, 20, 30, 40, 50, 60, 70, 80], 'master_id': [1, 2, 3, 4, 5, 6, 7, 8], 'pidy': ['b', 'c', 'd', 'd', 'c', 'c', 'y', 'y'], 'pidx': ['a', 'a', 'a', 'b', 'a', 'a', 'x', 'x'], 'flag': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']})) - 是df = df.groupby(['pidx','pidy']).agg({'master_id':'first','flag':'fi‌​rst', 'count':'sum'}).reset_index() 需要什么?
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 2019-05-20
    • 2023-03-25
    • 2018-02-07
    • 2017-02-06
    • 1970-01-01
    • 2020-08-10
    • 2018-04-29
    相关资源
    最近更新 更多