如何使用pandas groupby获取除每个组的最后一个条目之外的所有条目?

时间:2021-03-01 19:00:33

标签: pandas

我希望这样的事情能够获得除最后一个组之外的所有条目:

from io import StringIO
import pandas as pd
df = pd.read_table(StringIO("""A B
1 a
1 b
2 c
3 z
3 z
3 z"""), sep="\s+")
g = df.groupby("A")
g.head(g.size() - 1)

我想用矢量化函数来做,或者被告知为什么不可能:)

2 个答案:

答案 0 :(得分:3)

检查duplicated

out = df[df.duplicated('A',keep='last')]
Out[50]: 
   A  B
0  1  a
3  3  z
4  3  z

tail

df.drop(g.tail(1).index)
Out[54]: 
   A  B
0  1  a
3  3  z
4  3  z

答案 1 :(得分:2)

按照您的思路轻松进行,试试lambda

df.groupby('A').apply(lambda x: x.iloc[:-1])

不太简单的方法,使用transform

g = df.groupby('A')
df[g['A'].transform('size')-1 > g.cumcount()]

但最简单和最快:

df[~df.duplicated('A', keep='last')]