我想计算数据中各组之间的时间增量。
我的数据框有两个分组变量列,然后有一个时间码列。
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”]),以便每个组都具有到下一个组的时间间隔,以便该组中的最后一行将获得该值。否则,它将仅输入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()解决方案,但是至少我的代码在数据处理方面似乎很慢。
答案 0 :(得分:0)
此后,我感到自己很愚蠢,我想得太复杂了。我最后要做的是,我仅按“ g2”和“时间码”进行了排序,然后使用df.apply()进行了逐行检查,如果“批次”发生了变化,则将当前日期和以前的日期用作时间增量。