Ich habe folgende Datenrahmen:GroupBy - Wie Sekunden von Datetime mit diff extrahieren()
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
Und ich möchte den Unterschied zwischen den verschiedenen Einträgen zu finden - gruppiert nach 'ID3'
.
Ich versuche transform()
auf einem GroupBy
wie folgt zu verwenden:
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]
ich auch mit x.diff().astype(int)
für lambda
, mit dem exakt gleichen Ergebnis versucht habe.
Datentyp sowohl von 'DATETIME'
und 'diff'
ist: datetime64[ns]
Was ich versuche zu erreichen, haben diff
statt einiger Zeit in Bezug auf Epoch Zeit in Sekunden dargestellt.
Ich habe herausgefunden, dass ich df_2['diff']
-TimeDelta
umwandeln kann und dann Sekunden in einem verketteten Anruf extrahiert an dieser Stelle, wie folgt aus:
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
Gibt es eine Möglichkeit, diese (Sekunden als Wert zu erreichen, für df_2['diff']
) in einem Schritt in der transform
statt ein paar Schritte in dem Prozess zu machen?
Schließlich habe ich bereits versucht, die Umwandlung in TimeDelta
in transform
ohne Erfolg.
Danke für die Hilfe!
Spot on, danke! Gibt es ein Problem mit der Verwandlung oder was ist der Grund dafür, dass dies nicht innerhalb von 'transform' geschehen kann? – Thanos
@ Thanos, siehe "UPDATE" – MaxU
@ Thanos, ich habe einen [Bug] eingereicht (https://github.com/pydata/pandas/issues/13046) – MaxU