[英]Drop last n rows within pandas dataframe groupby
我有一個 dataframe df
我想在一組列中刪除最后n
行。 例如,假設df
被定義為下面的組是列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
>>>
n=2
時所需的 output 如下:
>>> 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
時所需的 output 如下:
>>> 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
>>>
您可以使用groupby
和drop
如下:
n = 2
df.drop(df.groupby(['a','b']).tail(n).index, axis=0)
您可以獲取每組tail(n)
記錄的索引值,並使用.loc
和~
來排除這些記錄。
n=3
df.loc[~df.index.isin(df.groupby(['a','b']).tail(n).index.values)]
Output
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.