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
我想按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
我想总结每个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:按两列分组,将第一列组中的第一个值相加的主要内容,如果未能解决你的问题,请参考以下文章