python - 计算组之间的时间增量
问题描述
我想计算我数据中组之间的时间增量。
我的数据框有两个分组变量列,然后是一个时间码列。
id g1 timecode g2 lot
...
6753 AX8 2018-12-11 21:06:00 A911928 1153
6754 AX8 2018-12-12 06:55:00 A912152 1154
6755 AX8 2018-12-12 16:35:00 A912152 1154
6756 AX8 2018-12-13 07:10:00 A912159 1155
6757 AX8 2018-12-13 12:28:00 A911404 1156
6758 AX8 2018-12-14 06:11:00 A911927 1157
6759 AX8 2018-12-15 20:00:00 A911928 1158
6760 AX8 2018-12-16 09:59:00 A911928 1158
6761 AX8 2018-12-17 01:20:00 A911914 1159
6762 AX8 2018-12-18 20:00:00 A911928 1160
6763 AX8 2018-12-19 09:59:00 A911928 1160
...
数据按 g1 排序,然后按时间码在该组内排序。
如果连续行中的 g1 和 g2 相同,我为它们生成了相同的批号。这只是为了提供信息,可能不需要。
现在我想要的是所有 g2 组的 timedelta。所以基本上对于 g2 项目 A911928 例如:
...
6753 AX8 2018-12-11 21:06:00 A911928 1153
...
6759 AX8 2018-12-15 20:00:00 A911928 1158
6760 AX8 2018-12-16 09:59:00 A911928 1158
...
6762 AX8 2018-12-18 20:00:00 A911928 1160
6763 AX8 2018-12-19 09:59:00 A911928 1160
...
我想为数据框(df [“diff”])生成新列,每个组都将具有下一组的 timedelta 间隔,以便该组中的最后一行获得该值。否则它只会输入 np.nan。就上面的例子而言:
- 第 6753 行将得到 (2018-12-15 20:00:00)-(2018-12-11 21:06:00)
- 第 6759 行将获得 np.nan
- 第 6760 行将得到 (2018-12-18 20:00:00)-(2018-12-16 09:59:00)
- 第 6762 行将得到 np.nan
- 第 6763 行将获取下一个时间增量(如果有,否则为 np.nan)
我尝试了不同的 groupbys 和 diff() 函数,但我似乎无法完全达到我的目标。
最有希望的尝试可能是在代码下面,但我完全不能从那跨过桥来计算增量并保持正确的顺序,然后将差异返回到原始数据帧。
df.groupby(["g1", "g2", "lot"]).agg({"timecode": ["min", "max"]})
timecode
g1 g2 lot min max
...
AX8 A911404 1156.0 2018-12-13 12:28:00 2018-12-13 12:28:00
A911927 1157.0 2018-12-14 06:11:00 2018-12-14 06:11:00
...
A911928 1153.0 2018-04-25 05:57:00 2018-04-25 05:57:00
1158.0 2018-12-15 20:00:00 2018-12-16 09:59:00
1160.0 2018-12-18 20:00:00 2018-12-19 09:59:00
...
我也玩过 iterrows() 解决方案,但至少我的代码对数据似乎很慢。
解决方案
现在后来觉得自己很傻,想的太复杂了。我最终做的是我只是按“g2”和“timecode”排序,然后使用 df.apply() 遍历这些行,如果“lot”发生变化,则使用当前和以前的日期作为 timedelta。
推荐阅读
- python - 这两个声明有何不同?
- sorting - 如何使用graphql对计算字段上的对象数组进行排序
- sql - 在 SQL 中自我加入以获取朋友的朋友
- mysql - 对于我写的以下查询,我收到“标量子查询包含多行”。有人可以纠正我吗?
- sql - 显示来自用户输入的 sql 数据
- c# - Xamarin Android - 尽管一切都已实现,但地理围栏服务无法正常工作
- constraint-programming - 如何在灵活的工作车间中编写操作的后续操作在同一台机器上完成的代码?
- postgresql - Postgres 在通过 JBOSS 运行我的应用程序时出现致命错误
- node.js - 在同一个 ubuntu 服务器上使用相同的 Nginx 为两个网站提供服务重定向到同一个网站
- python-3.x - 在时间序列中找到阶梯(或尖峰)形状的pythonic方法是什么?