我有一个看起来像这样的数据集
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分组的第一行和第二行,并且只得出一个值,而不是计算。
感谢您的关注!
答案 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