Python: Anzahl der rollierenden Stunden für kategoriale Variablen

Oct 04 2020

Ich habe einen Pandas-Datenrahmen mit Spalten ['DateTime', 'Variable']und versuche, in der letzten Stunde jeweils eine fortlaufende Zählung zu erhalten Variable. Thinking Pivot könnte irgendwie verwendet werden.

Beispieldaten

DateTime             Variable
8/24/19 3:30PM       A
8/24/19 3:32PM       A
8/24/19 3:36PM       B
8/24/19 3:50PM       C
8/25/19 2:50PM       A

Erwartete Ausgabe

DateTime          A    B    C
8/24/19 3:30PM    1    0    0 
8/24/19 3:32PM    2    0    0  
8/24/19 3:36PM    2    1    0 
8/24/19 3:50PM    2    1    1
8/25/19 2:50PM    1    0    0

Neue Variablen können hinzugefügt oder entfernt werden, sodass ich eine dynamische Lösung haben möchte.

Antworten

RichieV Oct 04 2020 at 02:47

Man könnte in der Tat beginnen mit pivot, oder es zu tun mit der Hand mit groupby.unstack.

Dann möchten Sie rollende Fensterdf.rolling erstellen , die mit vielen Funktionen zusammengefasst werden können. Damit die Fenster mit einem Zeitdelta (in diesem Fall 1 Stunde) erstellt werden können, müssen Sie sicherstellen, dass der Index vom Typ ist.datetime

df['DateTime'] = pd.to_datetime(df['DateTime'])

out = (
    df
    .groupby(['DateTime', 'Variable']) # set the columns as index
    .size() # aggregate by row count
    .unstack(fill_value=0) # move 'Variable' index level to columns
    .sort_index()
)

out = out.rolling('1h').sum()

Ausgabe

Variable               A    B    C
DateTime
2019-08-24 15:30:00  1.0  0.0  0.0
2019-08-24 15:32:00  2.0  0.0  0.0
2019-08-24 15:36:00  2.0  1.0  0.0
2019-08-24 15:50:00  2.0  1.0  1.0
2019-08-25 14:50:00  1.0  0.0  0.0
PrakritiShaurya Oct 04 2020 at 02:01

Unter Berücksichtigung von df ist Ihr Datensatz: new_df = df [df ['Variable'] == 'A']. Resample ('H'). Count ()

Sie können einen neuen Datenrahmen wie folgt erstellen: final_df = pd.DataFrame ({'DateTime': new_df.index, 'A': new_df.values})

Nehmen Sie in ähnlicher Weise die Anzahl für jede Kategorie der Variablenspalte und versuchen Sie, sie mit der Schleife final_df zu verknüpfen.

Ich habe es nicht versucht, aber hoffentlich würde es funktionieren.