在熊猫数据框groupby中删除最后n行

时间:2020-07-13 18:52:58

标签: python pandas dataframe group-by pandas-groupby

我有一个数据框df,我想在其中删除一组列中的最后n行。例如,假设df定义如下,即ab列的组:

>>> 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
>>> 

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
>>>

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
>>> 

2 个答案:

答案 0 :(得分:3)

您可以按以下方式使用groupbydrop

n = 2
df.drop(df.groupby(['a','b']).tail(n).index, axis=0)

答案 1 :(得分:1)

您可以获取每个组tail(n)条记录的索引值,并将.loc~一起使用以排除这些记录。

n=3
df.loc[~df.index.isin(df.groupby(['a','b']).tail(n).index.values)]

输出

      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