我希望这样的东西会得到所有的,但最后一个条目组:
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)
我想用向量化函数来做,或者被告知为什么不可能:)
检查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
沿着你的思路,尝试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')]