我有一个 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
因此,任务将涉及根据用户 ID 分组
,根据日期排序
,然后仅保留第一个(/最早)日期的行
。
最佳答案
您可以先按 sort_values
按 date
列对 DataFrame
进行排序然后 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
关于python - Pandas :分组并在一个组内切割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39362151/