我希望这样的事情能够获得除最后一个组之外的所有条目:
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)
我想用矢量化函数来做,或者被告知为什么不可能:)
答案 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')]