我有一个看起来像他的数据集:
ID date
1 O1-01-2012
1 05-02-2012
1 25-06-2013
1 14-12-2013
1 10-04-2014
2 19-05-2012
2 07-08-2014
2 10-09-2014
2 27-11-2015
2 01-12-2015
3 15-04-2013
3 17-05-2015
3 22-05-2015
3 30-10-2016
3 02-11-2016
我正在使用Python,我想为每个ID选择3个最后日期。这是我想要的数据集:
ID date
1 25-06-2013
1 14-12-2013
1 10-04-2014
2 10-09-2014
2 27-11-2015
2 01-12-2015
3 22-05-2015
3 30-10-2016
3 02-11-2016
我用这个代码为每个ID选择最后一个日期:
df_2=df.sort_values(by=['date']).drop_duplicates(subset='ID',keep='last')
但是,我如何选择多个日期(例如,最后3个日期或最后4个日期等(?
您可以使用groupby
和tail
以下方式从每组中获取最后两个项目:
import pandas as pd
df = pd.DataFrame({'ID':[1,1,1,2,2,2,3,3,3],'value':['A','B','C','D','E','F','G','H','I']})
df2 = df.groupby('ID').tail(2)
print(df2)
输出:
ID value
1 1 B
2 1 C
4 2 E
5 2 F
7 3 H
8 3 I
注意,为了简单起见,我使用了其他(已经排序的(数据来构建df
。
可以试试这个:
df.sort_values(by=['date']).groupby('ID').tail(3).sort_values(['ID', 'date'])
我尝试过,但使用了非日期时间数据类型
a = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]
b = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
import pandas as pd
import numpy as np
a = np.array([a,b])
df=pd.DataFrame(a.T,columns=['ID','Date'])
# the tail would give you the last n number of elements you are interested in
df_ = df.groupby('ID').tail(3)
df_
输出:
ID Date
2 1 c
3 1 d
4 1 e
7 2 h
8 2 i
9 2 j
12 3 m
13 3 n
14 3 o