总结 pandas groupby 的最后一个条目
summing last entry from 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 是第一个 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
我需要 70(A 组总和)和 110(B 组总和)而不是 180
我认为使用 last() 或 nth(-1) 时分组会丢失
tmp.groupby(['a','b'])['c'].last()
returns
a b
A A1 20
A2 100
Name: c, dtype: int64
您可以将 sum
与 level=0
或另一个 groupby
添加到第一级并汇总 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
你可以试试这个 drop_duplicates
然后 groupby
df.drop_duplicates(subset=['a', 'b','d'], take_last=True).groupby('a')['c'].sum()
Out[104]:
a
A 70
B 110
我有一个如下所示的 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
我需要 70(A 组总和)和 110(B 组总和)而不是 180
我认为使用 last() 或 nth(-1) 时分组会丢失
tmp.groupby(['a','b'])['c'].last()
returns
a b
A A1 20
A2 100
Name: c, dtype: int64
您可以将 sum
与 level=0
或另一个 groupby
添加到第一级并汇总 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
你可以试试这个 drop_duplicates
然后 groupby
df.drop_duplicates(subset=['a', 'b','d'], take_last=True).groupby('a')['c'].sum()
Out[104]:
a
A 70
B 110