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
我想按 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)
如果有人能帮助我,那就太好了。
谢谢!
我相信这就是您要找的。
您需要使用 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
在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)
如果有人能帮助我,那就太好了。 谢谢!
我相信这就是您要找的。
您需要使用 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