Ich habe einen vorhandenen Datenrahmen im folgenden Format (nennen wir ihn df
):
A B C D
0 1 2 1 4
1 3 0 2 2
2 1 5 3 1
Die Spaltennamen wurden aus einer Tabelle mit der folgenden Form extrahiert (nennen wir sie cat_df
):
current category
broader category
X A
Y B
Y C
Z D
Zuerst möchte ich einen übergeordneten Index voranstellen, damit df
so aussieht:
X Y Z
A B C D
0 1 2 1 4
1 3 0 2 2
2 1 5 3 1
Zuletzt möchte ich die Daten durch Summieren über Unterindizes in den Meta-Index einrollen, um einen neuen Datenrahmen wie folgt zu generieren:
X Y Z
0 1 3 4
1 3 2 2
2 1 8 1
Die Verwendung von concat
aus dieser Antwort hat mich nahe gebracht. aber es scheint ein sehr manueller Prozess zu sein, bei dem jede Teilmenge ausgewählt wird. Mein wahrer Datensatz hat eine komplexere Zuordnung, daher möchte ich beim Erstellen meines Meta-Index direkt darauf verweisen. Ich denke, sobald ich den Meta-Index festgelegt habe, sollte mich ein einfaches groupby
zur Summierung bringen, aber ich bin immer noch beim ersten Schritt festgefahren.
3 Antworten
d = dict(zip(cat_df['current category'], cat_df.index))
cols = pd.MultiIndex.from_arrays([df.columns.map(d.get), df.columns])
df.set_axis(cols, axis=1, inplace=False)
X Y Z
A B C D
0 1 2 1 4
1 3 0 2 2
2 1 5 3 1
df_new = df.set_axis(cols, axis=1, inplace=False)
df_new.groupby(axis=1, level=0).sum()
X Y Z
0 1 3 4
1 3 2 2
2 1 8 1
IIUC, du kannst es so machen.
df.columns = pd.MultiIndex.from_tuples(cat_df.reset_index()[['broader category','current category']].apply(tuple, axis=1).tolist())
Drucken (df)
Ausgabe:
X Y Z
A B C D
0 1 2 1 4
1 3 0 2 2
2 1 5 3 1
Summenstufe:
df.sum(level=0, axis=1)
Ausgabe:
X Y Z
0 1 3 4
1 3 2 2
2 1 8 1
Sie können set_index
zum Erstellen des IDX verwenden und dann Ihrem df zuweisen
idx=df1.set_index('category',append=True).index
df.columns=idx
df
Out[1170]:
current X Y Z
category A B C D
0 1 2 1 4
1 3 0 2 2
2 1 5 3 1
df.sum(axis=1,level=0)
Out[1171]:
current X Y Z
0 1 3 4
1 3 2 2
2 1 8 1
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.