0
votes

Colonnes MultiIndex du tableau croisé dynamique Pandas à un seul niveau

J'ai un dataframe pandas qui ressemble à ceci:

pd.pivot_table(df, 'VALUE', 'COLUMN_NAME', ['YEAR1', 'YEAR2'])

YEAR1         2013      2014
YEAR2         2014      2015
COLUMN_NAME     
Column1       0.042835  0.0336
Column2       0.004406  0.0169

Où pour chaque COLUMN_NAME, YEAR1 et YEAR2, une VALEUR est calculée. Je souhaite regrouper le dataframe de manière à ce qu'il soit unique sur COLUMN_NAME, où les colonnes ressemblent à ce qui suit:

df_desired = 
    COLUMN_NAME  Value_from_2013_2014   Value_from_2014_2015 ...
0   Column1      0.042835                  0.033600
1   Column2      0.004406                  0.016900
...

Je peux réaliser ce que je veux avec le code ci-dessous, mais il crée des colonnes MultiIndex, comment puis-je y parvenir? Merci pour l'aide.

df = 
    COLUMN_NAME  YEAR1  YEAR2   VALUE
0   Column1       2013   2014   0.042835
1   Column1       2014   2015   0.033600
2   Column2       2013   2014   0.004406
3   Column2       2014   2015   0.016900
...


1 commentaires

Est-ce que cela répond à votre question? Pandas - Comment aplatir un index hiérarchique en colonnes


3 Réponses :


-1
votes

Si je comprends bien, vous obtenez les valeurs souhaitées, mais pas les étiquettes souhaitées. Si tel est le cas, vous pouvez modifier les noms de colonne avec df_desired.columns = ['Value_from_2013_2014', 'Value_from_2014_2015']


0 commentaires

0
votes
df_agg = pd.pivot_table(df, 'VALUE', 'COLUMN_NAME', ['YEAR1', 'YEAR2'])
df_agg.columns = ['Value_from_' + str(df_agg.columns[i][0]) + '_' + str(df_agg.columns[i][1]) for i in range(len(df_agg.columns))]

2 commentaires

Veuillez utiliser le lien modifier sur votre question pour ajouter des informations supplémentaires. Le bouton Post Answer ne doit être utilisé que pour les réponses complètes à la question. - De l'avis


@RohanSingh: Bien que cela bénéficierait certainement d'une explication supplémentaire, il convient de noter que les réponses n'ont pas besoin d'être complètes - du moins en supposant qu'il n'y a pas encore de réponse acceptée ( source ).



1
votes

Vous pouvez aplatir les colonnes multiindex en utilisant to_flat_index , puis map sur str et ajouter votre préfixe:

s.columns = ["Value_from_"+"_".join(map(str, i)) for i in s.columns.to_flat_index()]

print (s)

             Value_from_2013_2014  Value_from_2014_2015
COLUMN_NAME                                            
Column1                  0.042835                0.0336
Column2                  0.004406                0.0169


0 commentaires