Python 将pandas groupby的最后一个条目相加

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)

我有一个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)
           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