【问题标题】:Group by two columns and get sum?按两列分组并得到总和?
【发布时间】:2019-04-27 21:18:23
【问题描述】:
x1 = [{'id1': 'Africa', 'id2': 'Europe', 'v': 1}, 
      {'id1': 'Europe', 'id2': 'North America', 'v': 5},
      {'id1': 'North America', 'id2': 'Asia', 'v': 2,}, 
      {'id1': 'North America', 'id2': 'Asia', 'v': 3}]

df = pd.DataFrame(x1)

如何按大洲分组并根据“v”列获得总和?

例如,我希望得到每个大陆的值总和如下:

Africa: 1 (1)
Europe: 6 (1 + 5)
North America: 10 (5 + 2 + 3)
Europe: 6 (1 + 5)

【问题讨论】:

    标签: python python-3.x pandas data-manipulation python-applymap


    【解决方案1】:

    使用melt 并聚合sum

    s = df.melt('v').groupby('value')['v'].sum()
    print (s)
    value
    Africa            1
    Asia              5
    Europe            6
    North America    10
    Name: v, dtype: int64
    

    对于DataFrame

    df = df.melt('v', value_name='a').groupby('a', as_index=False)['v'].sum()
    print (df)
                   a   v
    0         Africa   1
    1           Asia   5
    2         Europe   6
    3  North America  10
    

    【讨论】:

      【解决方案2】:

      按每一列分组,然后添加结果:

      df.groupby('id1').sum().add(df.groupby('id2').sum(), fill_value=0).astype(int)
      #                v
      #Africa          1
      #Asia            5
      #Europe          6
      #North America  10
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-10
        • 1970-01-01
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        • 2016-02-20
        • 2021-12-04
        • 2013-07-24
        相关资源
        最近更新 更多