分组并计算时间戳的差异

问题描述 投票:3回答:1

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

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.Ds有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分组的第一行和第二行,并且仅产生值而不是计算结果。

谢谢你的期待!

python-3.x pandas timestamp pandas-groupby timedelta
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.