Comment renommer des colonnes à plusieurs niveaux après une opération de pivotement pandas?
Voici du code pour générer des données de test:
import pandas as pd
df = pd.DataFrame({
'c0': ['A','A','B','C'],
'c01': ['A','A1','B','C'],
'c02': ['b','b','d','c'],
'v1': [1, 3,4,5],
'v2': [1, 3,4,5]})
print(df)
donne une trame de données de test:
c0 c01 c02 v1 v2
0 A A b 1 1
1 A A1 b 3 3
2 B B d 4 4
3 C C c 5 5
application du pivot
df2 = pd.pivot_table(df, index=["c0"], columns=["c01","c02"], values=["v1","v2"])
df2 = df2.reset_index()
donne
comment renommer les colonnes en rejoignant les niveaux? au format <c01 value>_<c02 value>_<v1>
par exemple, la première colonne doit ressembler à "A_b_v1"
L'ordre de rejoindre les niveaux n'est pas vraiment important pour moi.
Si vous souhaitez fusionner le multi-index en un index de chaîne unique sans vous soucier de l'ordre des niveaux d'index, vous pouvez simplement map
une fonction join
sur les colonnes et attribuer la liste des résultats:
df2.columns = list(map("_".join, df2.columns))
Et pour votre question, vous pouvez parcourir les colonnes où chaque élément est un tuple, décompresser le tuple et les rejoindre dans l'ordre que vous souhaitez:
df2 = pd.pivot_table(df, index=["c0"], columns=["c01","c02"], values=["v1","v2"])
# Use the list comprehension to make a list of new column names and assign it back
# to the DataFrame columns attribute.
df2.columns = ["_".join((j,k,i)) for i,j,k in df2.columns]
df2.reset_index()