Pandas:按两列分组,对第一个列分组的第一个值求和

Pandas: group by two columns, sum up the first value in the first column group

在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)

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

我相信这就是您要找的。

您需要使用 first 的第一步,因为您想要 groupby 中的第一个。完成后,使用 reset_index() 以便之后可以使用 groupby 并使用 ID.

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

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

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