我有一个类似下面的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是第一个groupby
条件
>>> 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
而不是180我需要70,(A组的总和)和110(B组的总和)
我认为使用last()或nth(-1)
时分组会丢失答案 0 :(得分:0)
tmp.groupby(['a','b'])['c'].last()
返回
a b
A A1 20
A2 100
Name: c, dtype: int64
答案 1 :(得分:0)
您可以使用level=0
或其他groupby
添加sum
作为汇总sum
的第一级:
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'].nth(-1).groupby(level=0).sum()
print (df)
a
A 70
B 110
Name: c, dtype: int64
与last
相同:
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
答案 2 :(得分:0)
您可以尝试此drop_duplicates
,然后groupby
df.drop_duplicates(subset=['a', 'b','d'], take_last=True).groupby('a')['c'].sum()
Out[104]:
a
A 70
B 110