J'ai un dataframe avec 2 niveaux d'index:
value
Trial measurement
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
Ce que je veux transformer en ceci:
Trial measurement value
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
Comment puis-je le faire au mieux?
J'ai besoin de cela parce que je veux agréger les données comme indiqué ici , mais je ne peux pas sélectionner mes colonnes de cette manière si elles sont utilisées comme index.
reset_index () est une méthode pandas DataFrame qui transfère les valeurs d'index dans le DataFrame sous forme de colonnes. Le paramètre par défaut pour le paramètre est drop = False (qui conservera les valeurs d'index sous forme de colonnes).
Tout ce que vous avez à faire, ajoutez .reset_index(inplace=True)
après le nom du DataFrame:
df.reset_index(inplace=True)
Cela ne s'applique pas vraiment à votre cas, mais cela pourrait être utile pour d'autres personnes (comme moi il y a 5 minutes) de savoir. Si un multindex porte les mêmes noms, comme ceci:
value
Trial Trial
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
df.reset_index(inplace=True)
va échouer car les colonnes créées ne peuvent pas partager les noms.
Vous devez donc renommer le multindex avec df.index = df.index.set_names(['Trial', 'measurement'])
pour obtenir:
value
Trial measurement
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
Et puis df.reset_index(inplace=True)
fonctionnera comme un charme.
J'ai rencontré ce problème après avoir regroupé par année et par mois sur une colonne datetime (non index) appelée live_date
, ce qui signifiait que l'année et le mois étaient nommés live_date
.
Comme @ cs95 mentionné dans un commentaire, pour ne supprimer qu'un niveau, utilisez:
df.reset_index(level=[...])
Cela évite de devoir redéfinir l'index souhaité après la réinitialisation.