按组计算时间戳之间的差异

3

我有一个数据集,长这样

I.D       Timestamp
F322      2019-02-20 23:47:30.057
F322      2019-02-20 23:48:01.959 
F322      2019-02-20 23:50:04.308   
F422      2019-02-24 22:22:37.418
F422      2019-02-24 22:24:05.397

我正在尝试创建一个新列,它通过 I.D 列进行分组,并减去已排序的时间戳之间的差异,然后再减去其前面的时间戳。有些 I.D 具有 2、3 或 4 个时间戳。

输出将类似于以下内容:

I.D       Timestamp                   Minutes
F322      2019-02-20 23:47:30.057         NaN
F322      2019-02-20 23:48:01.959         0.5
F322      2019-02-20 23:50:04.308         2.0
F422      2019-02-24 22:22:37.418         NaN
F422      2019-02-24 22:24:05.397         1.5

我过去曾经使用以下代码,不过是用于其他用途。

df.groupby('I.D')['Timestamp'].agg(lambda x: x.iat[0] < x.iat[-1])

np.where(df['I.D'].map(mask), 1, 2)

只能导致按ID分组的第一行和第二行产生值为1或2,仅生成值而不进行计算。

感谢查看!


0.9...是什么? - Andy Hayden
抱歉,这只是该行时间戳与其前一行之间的分钟差异。 - Chris90
我认为这是一个错误的计算!应该是0.516667,就像我的答案一样? - Andy Hayden
正确!抱歉! - Chris90
1个回答

2
你可以使用groupby和diff函数来实现:

最初的回答

In [11]: res = df.groupby("I.D").Timestamp.diff()

In [12]: res
Out[12]:
0               NaT
1   00:00:31.902000
2   00:02:02.349000
3               NaT
4   00:01:27.979000
Name: Timestamp, dtype: timedelta64[ns]

然后将秒数除以60得到分钟数:
In [13]: res.dt.seconds / 60
Out[13]:
0         NaN
1    0.516667
2    2.033333
3         NaN
4    1.450000
Name: Timestamp, dtype: float64

谢谢!快速问题 - 如果我想创建另一列 - 该列排名每个分组 i.d 的时间戳(不是您刚刚帮助我计算的分钟),我该怎么做?因此,每个 i.d 都将有一个列,按升序排列为1,2,3,4,与时间戳列相关联? - Chris90
@Chris90,我认为你正在寻找df.groupby("I.D").cumcount(),但如果有其他问题,请提出新的问题 :) - Andy Hayden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接