给定类型的某个表
A | B | C | |
---|---|---|---|
t | r | <1>||
r | 1 | ||
n | j | 2 | |
n | j | 2 | |
n | j | 2 |
您可以使用groupby.cumcount
和布尔索引:
out = df[df['C'].gt(df.groupby(['A', 'B']).cumcount())]
或者使用经典groupby.apply
:
(df.groupby(['A', 'B'], sort=False, as_index=False, group_keys=False)
.apply(lambda g: g.head(g['C'].iloc[0]))
)
输出:
A B C
0 t r 1
2 n j 2
3 n j 2
groupby.cumcount
方法的中间体:
A B C cumcount C > cumcount
0 t r 1 0 True
1 t r 1 1 False
2 n j 2 0 True
3 n j 2 1 True
4 n j 2 2 False
以下内容似乎有效,并且基于GroupBy.nth
:
df[::-1].groupby(['A', 'B'], as_index=False).nth(df['C'])
输出:
A B C
3 n j 2
2 n j 2
0 t r 1