我有以下數據框:的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