我有一个熊猫数据帧,看起来像这样:
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 objecttime列中数据点的type()是一个datetime.date
因此,这些任务将涉及grouping with respect to userid、sorting according to the date,然后是retaining only the rows with first(/earliest) date。
发布于 2016-09-07 14:14:51
您可以先按列对DataFrame排序date按sort_values排序,然后使用apply boolean indexing进行groupby - get所有行,其中是第一个值:
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-03https://stackoverflow.com/questions/39362151
复制相似问题