Ich habe eine DataFrame
von einigen Transaktionen. Ich möchte diese Transaktionen in Bezug auf ihre Spaltenwerte item
und time
gruppieren: Ziel ist es, Elemente zu gruppieren, die innerhalb von 1 Stunde voneinander entfernt sind. Wir beginnen also eine neue Gruppe zum Zeitpunkt der nächsten Beobachtung, die nicht innerhalb einer Stunde nach der Beobachtung vorlag (siehe Spalte start time
in DataFrame
B
).So gruppieren Sie Zeilen innerhalb eines Zeitraums mit Python
Hier sind die Daten: Ich möchte A
zu B
konvertieren.
A=
item time result
A 2016-04-18 13:08:25 Y
A 2016-04-18 13:57:05 N
A 2016-04-18 14:00:12 N
A 2016-04-18 23:45:50 Y
A 2016-04-20 16:53:48 Y
A 2016-04-20 17:11:47 N
B 2016-04-18 15:24:48 N
C 2016-04-23 13:20:44 N
C 2016-04-23 14:02:23 Y
B=
item start time end time Ys Ns total count
A 2016-04-18 13:08:25 2016-04-18 14:08:25 1 2 3
A 2016-04-18 23:45:50 2016-04-18 00:45:50 1 0 1
A 2016-04-20 16:53:48 2016-04-20 17:53:48 1 1 2
B 2016-04-18 15:24:48 2016-04-18 16:24:48 0 1 1
C 2016-04-23 13:20:44 2016-04-23 14:20:44 1 1 2
Hier ist, was ich getan habe:
grouped = A.groupby('item')
A['end'] = (grouped['time'].transform(lambda grp: grp.min()+pd.Timedelta(hours=1)))
A2 = A.loc[(A['time'] <= A['end'])]
Das ist mir pro Tag eine Gruppe gibt: die Transaktion innerhalb 1 Stunde nach der ersten Transaktion. Also, ich vermisse andere Transaktionen am selben Tag, aber mehr als 1 Stunde von der ersten Stunde. Mein Kampf ist, wie man diese Gruppen bekommt. Ich kann dann pd.crosstab
verwenden, um die gewünschten Details aus der result
Spalte zu erhalten.
Eine weitere Idee, die ich habe, ist A
von item
und time
zu sortieren, und dann Zeile für Zeile gehen. Wenn die Zeit innerhalb von 1 Stunde nach der vorherigen Zeile liegt, wird diese Gruppe hinzugefügt, andernfalls wird eine neue Gruppe erstellt.
Es gibt viele Fragen offen. Wie, gruppiert innerhalb einer Stunde nach wann? Eine Stunde erster Beobachtung? Was ist mit der nächsten Stunde? Fängt es an, als die letzte Stunde aufgehört hat? Oder beginnen wir eine neue Stunde zur Zeit der nächsten Beobachtung, die nicht innerhalb einer Stunde nach der Beobachtung vorher war? – piRSquared
Was ist in Ihrem Code "gruppiert"? Wie haben Sie es bekommen? – MaxU
@piRSquared Ich habe weitere Details zur Klärung hinzugefügt. – Ana