我有一个看起来像这样的数据集
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分组的第一行和第二行,并且仅产生值而不是计算结果。
谢谢你的期待!
你可以使用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