Pandas:按两列分组,将第一列组中的第一个值相加

Posted

技术标签:

【中文标题】Pandas:按两列分组,将第一列组中的第一个值相加【英文标题】:Pandas: group by two columns, sum up the first value in the first column group 【发布时间】: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)

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于Pandas:按两列分组,将第一列组中的第一个值相加的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 中分组字符串的累积和

按两列排序,为啥不先分组呢?

按两列分组,其中一列是时间戳

按两列分组并计算 Pandas 中每个组合的出现次数

PostgreSQL - 按两列分组并使用一列作为结果列

按两列分组并根据其中一列计算累积值