Wie gruppiere ich DataFrame nach einem bestimmten Zeitraum?
Ich habe einige Daten aus Protokolldateien und möchte Einträge nach Minuten gruppieren:
def gen(date, count=10):
while count > 0:
yield date, "event{}".format(randint(1,9)), "source{}".format(randint(1,3))
count -= 1
date += DateOffset(seconds=randint(40))
df = DataFrame.from_records(list(gen(datetime(2012,1,1,12, 30))), index='Time', columns=['Time', 'Event', 'Source'])
df:
Event Source
2012-01-01 12:30:00 event3 source1
2012-01-01 12:30:12 event2 source2
2012-01-01 12:30:12 event2 source2
2012-01-01 12:30:29 event6 source1
2012-01-01 12:30:38 event1 source1
2012-01-01 12:31:05 event4 source2
2012-01-01 12:31:38 event4 source1
2012-01-01 12:31:44 event5 source1
2012-01-01 12:31:48 event5 source2
2012-01-01 12:32:23 event6 source1
Ich habe diese Optionen ausprobiert:
df.resample('Min')
ist zu hoch und will aggregieren.df.groupby(date_range(datetime(2012,1,1,12, 30), freq='Min', periods=4))
schlägt mit Ausnahme fehl.df.groupby(TimeGrouper(freq='Min'))
funktioniert gut und gibt a zurückDataFrameGroupBy
Objekt zur Weiterverarbeitung, z.
grouped = df.groupby(TimeGrouper(freq='Min'))
grouped.Source.value_counts()
2012-01-01 12:30:00 source1 1
2012-01-01 12:31:00 source2 2
source1 2
2012-01-01 12:32:00 source2 2
source1 2
2012-01-01 12:33:00 source1 1
jedoch, dasTimeGrouper
Klasse ist nicht dokumentiert.
Was ist der richtige Weg, um nach einem bestimmten Zeitraum zu gruppieren? Wie kann ich die Daten nach Minuten UND nach der Spalte Quelle gruppieren, z.groupby([TimeGrouper(freq='Min'), df.Source])
?