熊猫:Groupby并在一个团体内切割

时间:2016-09-07 05:57:32

标签: python python-2.7 pandas

我有一个像这样的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 useridsorting according to the date,然后是retaining only the rows with first(/earliest) date

1 个答案:

答案 0 :(得分:3)

您可以先按sort_valuesDataFrame排序date,然后groupby 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