在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
我想按ID
和Ref
分组,并在每个分组中占据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)
如果有人为此提供帮助,那就太好了。 谢谢!
答案 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