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

时间:2018-07-12 15:17:36

标签: python pandas group-by sum head

在Python中,我有一个熊猫数据框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

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

ID     Sum
 A      65
 B      55

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

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

如果有人为此提供帮助,那就太好了。 谢谢!

2 个答案:

答案 0 :(得分:4)

我相信这就是您要寻找的。

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

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

答案 1 :(得分:2)

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

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