Pandas:在分组内进行分组和切割

3

我有一个类似于这样的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

因此,我希望保留用户的行数据直到第一个日期事件,并将其余部分剪切。

最终数据框如下:

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

因此,任务涉及按userid分组按日期排序,然后仅保留第一个(最早)日期的行

1个回答

3
你可以通过 sort_values 按列 dateDataFrame 进行排序,然后使用 applyboolean 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

太好了。谢谢 :) 我正在尝试对groupby对象进行排序 :D - Dawny33
很高兴能帮助你。祝你有美好的一天! - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接