分组并计算时间戳的差异
Posted
技术标签:
【中文标题】分组并计算时间戳的差异【英文标题】:Group by and calculate difference in timestamp 【发布时间】:2019-07-21 22:28:10 【问题描述】:我有一个看起来像这样的数据集
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 分组的 a 的第一行和第二行,并且只产生一个值而不是计算。
感谢收看!
【问题讨论】:
什么是 0.9...? 抱歉,这只是该行时间戳和之前的行之间的分钟差 我认为这是一个误判!应该是我的答案中的 0.516667? 正确!对不起! 【参考方案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
【讨论】:
谢谢!快速提问 - 如果我想创建另一列 - 对每个分组的 i.ds 时间戳(不是你刚才帮我计算的分钟数)进行排名,我该怎么做?所以每个 i.d 都会有一个与时间戳列相关的按升序排列 1、2、3、4 的列? @Chris90 你在找df.groupby("I.D").cumcount()
我想,但是如果有什么不同,请提出一个新问题:)以上是关于分组并计算时间戳的差异的主要内容,如果未能解决你的问题,请参考以下文章