Python 将pandas groupby的最后一个条目相加
我有一个csv,如下所示Python 将pandas groupby的最后一个条目相加,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个csv,如下所示 a,b,c,d A,A1,10,B1 A,A1,20,B1 A,A1,30,B1 A,A1,10,B4 A,A1,20,B4 A,A1,10,B5 A,A1,10,B6 B,A2,10,B7 B,A2,20,B1 B,A2,100,B1 我想取每组的最后一行,对每个“a”的c列求和 我可以使用.last()取最后一个,但仍坚持按“a”求和,其中a是第一个分组标准 >>> tmp.groupby(['a','b','d']).nth(-1)
a,b,c,d
A,A1,10,B1
A,A1,20,B1
A,A1,30,B1
A,A1,10,B4
A,A1,20,B4
A,A1,10,B5
A,A1,10,B6
B,A2,10,B7
B,A2,20,B1
B,A2,100,B1
我想取每组的最后一行,对每个“a”的c
列求和
我可以使用.last()
取最后一个,但仍坚持按“a”求和,其中a是第一个分组标准
>>> tmp.groupby(['a','b','d']).nth(-1)
c
a b d
A A1 B1 30
B4 20
B5 10
B6 10
B A2 B1 100
B7 10
>>> tmp.groupby(['a','b','d']).nth(-1)['c'].sum()
180
我需要70(A组之和)和110(B组之和),而不是180
我认为使用last()或nth(-1)时分组丢失
返回
a b
A A1 20
A2 100
Name: c, dtype: int64
您可以使用聚合sum
按第一级添加level=0
或另一个groupby
:
df = tmp.groupby(['a','b','d'])['c'].nth(-1).sum(level=0)
print (df)
a
A 70
B 110
Name: c, dtype: int64
与上次相同
:
df = tmp.groupby(['a','b','d'])['c'].last().sum(level=0)
print (df)
a
A 70
B 110
Name: c, dtype: int64
您可以尝试此
drop_duplicates
,然后groupby
df.drop_duplicates(subset=['a', 'b','d'], take_last=True).groupby('a')['c'].sum()
Out[104]:
a
A 70
B 110
编辑问题。我想我犯了一个错误。对不起,我在发帖时犯了一个错误,我已经更正了问题哇@jezrael你是一个渴望。施塔阿科·维姆·普里亚特酒店
df = tmp.groupby(['a','b','d'])['c'].last().sum(level=0)
print (df)
a
A 70
B 110
Name: c, dtype: int64
df = tmp.groupby(['a','b','d'])['c'].last().groupby(level=0).sum()
print (df)
a
A 70
B 110
Name: c, dtype: int64
df.drop_duplicates(subset=['a', 'b','d'], take_last=True).groupby('a')['c'].sum()
Out[104]:
a
A 70
B 110