分组并计算时间戳差异

时间:2019-02-28 04:22:20

标签: python-3.x pandas timestamp pandas-groupby timedelta

我有一个看起来像这样的数据集

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)

要得出的值是1或2,但这仅适用于按I.D分组的第一行和第二行,并且只得出一个值,而不是计算。

感谢您的关注!

1 个答案:

答案 0 :(得分:1)

您可以使用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