Pandas Pivot Table: Spalten nach speziellem Intervall einteilen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Benutzeravatar
noisefloor
User
Beiträge: 4324
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ich bekomme etwas bei Pandas nicht hin bzw verstehe nicht, wie ich das anstellen soll.

Ich habe einen DateFrame (imporiert aus einer Excel-Datei aus einem ERP System, der u.a. Spalten für Produktgruppe, Umsatz und Datum hat. Die Daten sind zeilenbasiert, es kann mehrere Zeilen pro Produktgruppe und Datum geben.

Die Daten möchte ich pivotieren. Was auch keine Problem ist, wenn ich die Produktgruppe als Index, den Umsatz als `values`, die Aggregierung mit `sum` mache und als `columns` Monat und Jahr (aus dem Datum abgeleitet) nehme.

Jetzt sollen die Spalten aber nicht Jahr / Monats Intervalle sein, sondern ein etwas schräges Interval vom Samstag nach dem letzten Freitag des Vormonats bis zum letzten Freitag des aktuellen Monats sein. Das Berechnen der Intervalle ist kein Problem:

Code: Alles auswählen

def calc_periods(start_date, last_date):
    date_range = pd.date_range(start_date, last_date, freq='M')
    periods = date_range.where(date_range.weekday == 4, date_range - pd.offsets.Week(weekday=4))
    return periods
(Disclaimer: das basiert nicht auf meinen Pandas-Skills, findet man so bei SO.

Damit bekomme ich einen passenden DatetimeIndex. Soweit, so gut. Nur: ich habe keinen Plan, wie ich dem `columns` Argument von `pd.pivot_table` mitgebe, dass das die Datumsspalte des DataFrames für die Pivot Tabelle nach dem DatetimeIndex gruppiert wird. `columns` kann ein pd.Grouper Objekt als Argument bekommen - aber ich habe keine Ahnung, was ich pd.Grouper() als Argumente mitgeben muss, um das passende Grouper-Objekt zu bekommen.

Gruß, noisefloor
Antworten