python - DataFrame中的时间计算和动作分组
问题描述
我有一个数据框,其中包含用户、操作和用户采取操作的时间。如果它们同时满足以下两个条件,我想将操作分组到一个列表中: 1. 同一用户采取的行动 2. 20 分钟内采取的行动。
目前我正在尝试使用 timedelta 来计算迭代的时间差并阅读这篇文章,但这不是我想要的。我很难找到类似的例子。
数据框有数千行,这是其中的一部分
user action time
A browse 2018-07-01 06:00:00
A edit 2018-07-01 06:10:00
B signin 2018-07-01 06:00:00
B browse 2018-07-01 06:11:00
B edit 2018-07-01 07:00:00
预期输出将是满足条件的操作列表
output
[[browse, edit], [signin, browse]]
用户 B 所做的最后一次“编辑”不在其中,因为 (07:00:00) - (06:11:00) > 20 分钟
关于如何做到这一点的任何建议?非常感谢您的先进!
解决方案
你可以使用的IIUC,
df['time'] = pd.to_datetime(df.time)
cond = df.groupby('user')['time'].diff().bfill().lt(pd.Timedelta('20m'))
df1 = df[cond].groupby('user')['action'].apply(list).tolist()
print (df1)
[['browse', 'edit'], ['signin', 'browse']]
推荐阅读
- html - Tailwind 响应式 flexbox 属性未按预期工作
- reactjs - 在 useEffect 依赖数组中添加数组会导致无限循环
- amazon-web-services - S3-选择 JSON 定价
- java - 如何从 Spring Boot 中的 Thymeleaf 模板调用方法?
- sharepoint - 将 Sharepoint 导出为 Excel 表单
- python - dict() 函数在 colab 和 jupyter notebook 之间的行为不同
- javascript - 纯js中的动画优化
- html - 如何使用 GitHub Pages 上的 Jekyll 使用 Bootstrap 4 的“site\docs\4.4\examples”文件夹内容?
- arrays - C语言数组中的字符出现
- python - 在多个列表中,我如何找到并返回包含我想要的值的列表?