【问题标题】:Pandas: group by two columns, sum up the first value in the first column groupPandas:按两列分组,将第一列组中的第一个值相加
【发布时间】:2018-12-20 21:33:44
【问题描述】:

在 Python 中,我有一个 pandas 数据框 df

ID    Ref    Dist
 A      0      10
 A      0      10
 A      1      20
 A      1      20
 A      2      30     
 A      2      30
 A      3       5
 A      3       5
 B      0       8
 B      0       8
 B      1      40
 B      1      40
 B      2       7
 B      2       7

我想按IDRef 分组,并取每个组中Dist 列的第一行。

ID    Ref    Dist
 A      0      10
 A      1      20
 A      2      30     
 A      3       5
 B      0       8
 B      1      40
 B      2       7

我想总结每个ID 组中的Dist 列。

ID     Sum
 A      65
 B      55

我尝试这样做来执行第一步,但这只是给我行的索引和Dist,所以我无法继续进行第二步。

df.groupby(['ID', 'Ref'])['Dist'].head(1)

如果有人帮助我,那就太好了。 谢谢!

【问题讨论】:

    标签: python pandas group-by sum head


    【解决方案1】:

    groupby 之前只是drop_duplicates。默认行为是保留第一个重复行,这是您想要的。

    df.drop_duplicates(['ID', 'Ref']).groupby('ID').Dist.sum()
    #A    65
    #B    55
    #Name: Dist, dtype: int64
    

    【讨论】:

      【解决方案2】:

      我相信这就是您正在寻找的。

      第一步你需要使用first,因为你想要groupby中的第一步。完成此操作后,请使用 reset_index(),以便之后使用 groupby 并使用 ID 进行总结。

      df.groupby(['ID','Ref'])['Dist'].first()\
                .reset_index().groupby(['ID'])['Dist'].sum()
      ID
      A    65
      B    55
      

      【讨论】:

        猜你喜欢
        • 2022-07-06
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 2018-11-29
        • 2019-01-13
        • 2022-11-12
        • 2019-06-10
        • 1970-01-01
        相关资源
        最近更新 更多