我有一个像这样的pandas数据框:
userid name date
1 name1 2016-06-04
1 name2 2016-06-05
1 name3 2016-06-04
1 name1 2016-06-06
2 name23 2016-06-01
2 name2 2016-06-01
3 name1 2016-06-03
3 name6 2016-06-03
3 name12 2016-06-03
3 name65 2016-06-04
所以,我想只保留用户的行,直到第一个日期事件,并切断其余部分。
最终的df如下:
userid name date
1 name1 2016-06-04
1 name2 2016-06-04
2 name23 2016-06-01
2 name2 2016-06-01
3 name1 2016-06-03
3 name6 2016-06-03
3 name12 2016-06-03
userid int64
name object
time object
时间列中的type()
个数据点为datetime.date
因此,任务涉及grouping with respect to userid
,sorting according to the date
,然后是retaining only the rows with first(/earliest) date
。
答案 0 :(得分:3)
您可以先按sort_values
列DataFrame
排序date
,然后groupby
apply
排boolean indexing
- 获取所有第一行值:
df = df.sort_values('date')
.groupby('userid')
.apply(lambda x: x[x.date == x.date.iloc[0]])
.reset_index(drop=True)
print (df)
userid name date
0 1 name1 2016-06-04
1 1 name3 2016-06-04
2 2 name23 2016-06-01
3 2 name2 2016-06-01
4 3 name1 2016-06-03
5 3 name6 2016-06-03
6 3 name12 2016-06-03