python - Pandas :分组并在一个组内切割

标签 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

因此,任务将涉及根据用户 ID 分组根据日期排序,然后仅保留第一个(/最早)日期的行

最佳答案

您可以先按 sort_valuesdate 列对 DataFrame 进行排序然后 groupbyapply 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/

相关文章:

python - ElasticSearch,将值附加到字段,但检查字段是否首先存在,如果不存在,则附加字段

python - Pandas - 将 groupby() 与rolling() 和 apply() 一起使用时非常慢

python - 如何对Python类进行深拷贝?

python - Pandas - 如何将多个列组合成一个以列表作为值的新列?

python - Pandas 追加到系列中

python - 在 networkx/plotly 网络和标记处间隔节点

python - 网页抓取 bs4,无法弄清楚如何获得结果

python - 如何允许一个函数被两个名字调用?

python-2.7 - 基于另一个字段的模型字段的动态默认值

python - 错误: 413 Request Too Large - Python Google Drive API with resumable MediaIoBaseUpload Request