我有以下数据框:的GroupBy - 如何从日期时间与差异中提取秒()
In [372]: df_2
Out[372]:
A ID3 DATETIME
0 B-028 b76cd912ff 2014-10-08 13:43:27
1 B-054 4a57ed0b02 2014-10-08 14:26:19
2 B-076 1a682034f8 2014-10-08 14:29:01
3 B-023 b76cd912ff 2014-10-08 18:39:34
4 B-023 f88g8d7sds 2014-10-08 18:40:18
5 B-033 b76cd912ff 2014-10-08 18:44:30
6 B-032 b76cd912ff 2014-10-08 18:46:00
7 B-037 b76cd912ff 2014-10-08 18:52:15
8 B-046 db959faf02 2014-10-08 18:59:59
9 B-053 b76cd912ff 2014-10-08 19:17:48
10 B-065 b76cd912ff 2014-10-08 19:21:38
而且我想找到不同的条目之间的差异 - 由'ID3'
分组。
我想在GroupBy
这样使用transform()
:
In [379]: df_2['diff'] = df_2.sort_values(by='DATETIME').groupby('ID3')['DATETIME'].transform(lambda x: x.diff()); df_2['diff']
Out[379]:
0 NaT
1 NaT
2 NaT
3 1970-01-01 04:56:07
4 NaT
5 1970-01-01 00:04:56
6 1970-01-01 00:01:30
7 1970-01-01 00:06:15
8 NaT
9 1970-01-01 00:25:33
10 1970-01-01 00:03:50
Name: diff, dtype: datetime64[ns]
我也试图与x.diff().astype(int)
为lambda
,具有完全相同的结果。
两个'DATETIME'
和'diff'
的数据类型是:datetime64[ns]
我想实现的是有diff
在几秒钟内,而不是相对于大纪元一段时间来表示。
我已经想通了,我可以转换df_2['diff']
到TimeDelta
,然后在这一点上提取一个链接秒呼叫,像这样:
In [405]: df_2['diff'] = pd.to_timedelta(df_2['diff']).map(lambda x: x.total_seconds()); df_2['diff']
Out[407]:
0 NaN
1 NaN
2 NaN
3 17767.0
4 NaN
5 296.0
6 90.0
7 375.0
8 NaN
9 1533.0
10 230.0
Name: diff, dtype: float64
有没有办法来实现这一(秒为df_2['diff']
值)在transform
的一个步骤中,而不是在这个过程中采取几个步骤?
最后,我已经尝试在transform
中转换为TimeDelta
没有任何成功。
感谢您的帮助!
点上,谢谢!在转换过程中是否存在一些问题,或者在变换中无法完成的原因是什么? – Thanos
@Thanos,请参阅“更新” – MaxU
@Thanos,我已经提交了一个[bug](https://github.com/pydata/pandas/issues/13046) – MaxU