删除 pandas 数据框 groupby 中的最后 n 行

Ger*_*rry 5 python group-by dataframe pandas pandas-groupby

我有一个数据框df,我想n在其中删除一组列中的最后一行。例如,saydf的定义如下,组由列a和组成b

>>> import pandas as pd
>>> df = pd.DataFrame({'a':['abd']*4 + ['pqr']*5 + ['xyz']*7, 'b':['john']*7 + ['doe']*9, 'c':range(16), 'd':range(1000,1016)})
>>> df
      a     b   c     d
0   abd  john   0  1000
1   abd  john   1  1001
2   abd  john   2  1002
3   abd  john   3  1003
4   pqr  john   4  1004
5   pqr  john   5  1005
6   pqr  john   6  1006
7   pqr   doe   7  1007
8   pqr   doe   8  1008
9   xyz   doe   9  1009
10  xyz   doe  10  1010
11  xyz   doe  11  1011
12  xyz   doe  12  1012
13  xyz   doe  13  1013
14  xyz   doe  14  1014
15  xyz   doe  15  1015
>>> 
Run Code Online (Sandbox Code Playgroud)

所需的输出n=2如下:

>>> df
      a     b   c     d
0   abd  john   0  1000
1   abd  john   1  1001
4   pqr  john   4  1004
9   xyz   doe   9  1009
10  xyz   doe  10  1010
11  xyz   doe  11  1011
12  xyz   doe  12  1012
13  xyz   doe  13  1013
>>>
Run Code Online (Sandbox Code Playgroud)

所需的输出n=3如下:

>>> df
      a     b   c     d
0   abd  john   0  1000
9   xyz   doe   9  1009
10  xyz   doe  10  1010
11  xyz   doe  11  1011
12  xyz   doe  12  1012
>>> 
Run Code Online (Sandbox Code Playgroud)

nim*_*ous 7

您可以使用groupbyand ,drop如下所示:

n = 2
df.drop(df.groupby(['a','b']).tail(n).index, axis=0)
Run Code Online (Sandbox Code Playgroud)