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 faire cela au mieux?
J'en ai besoin car je souhaite agréger les données comme indiqué ici , mais je ne peux pas sélectionner mes colonnes comme ça si elles sont utilisées comme index.
.reset_index()
Réponses:
Le reset_index () est une méthode de pandas DataFrame qui transférera les valeurs d'index dans le DataFrame sous forme de colonnes. Le paramètre par défaut du paramètre est drop = False (qui conservera les valeurs d'index sous forme de colonnes).
Tout ce que vous avez à faire ajouter
.reset_index(inplace=True)
après le nom du DataFrame:la source
df.reset_index(level=[...])
Cela ne s'applique pas vraiment à votre cas, mais pourrait être utile pour d'autres (comme moi il y a 5 minutes) de le savoir. Si un multindex porte le même nom comme ceci:
df.reset_index(inplace=True)
échouera, car les colonnes créées ne peuvent pas avoir les mêmes noms.Vous devez donc renommer le multindex avec
df.index = df.index.set_names(['Trial', 'measurement'])
pour obtenir: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 (pas d'index) appelée
live_date
, ce qui signifiait que l'année et le mois étaient nomméslive_date
.la source
Comme @ cs95 l'a mentionné dans un commentaire, pour ne supprimer qu'un seul niveau, utilisez:
df.reset_index(level=[...])
Cela évite d'avoir à redéfinir l'index souhaité après la réinitialisation.
la source