Comment convertir l'index pandas dans un dataframe en colonne?
Cela semble plutôt évident, mais je n'arrive pas à comprendre comment convertir un index de trame de données en une colonne?
Par exemple:
df=
gi ptt_loc
0 384444683 593
1 384444684 594
2 384444686 596
À,
df=
index1 gi ptt_loc
0 0 384444683 593
1 1 384444684 594
2 2 384444686 596
3 réponses
Soit:
df['index1'] = df.index
Ou, .reset_index
:
df.reset_index(level=0, inplace=True)
Donc, si vous avez un cadre multi-index avec 3 niveaux d'index, comme:
>>> df
val
tick tag obs
2016-02-26 C 2 0.0139
2016-02-27 A 2 0.5577
2016-02-28 C 6 0.0303
Et vous voulez convertir les 1er (tick
) et 3ème (obs
) niveaux de l'index en colonnes, vous feriez:
>>> df.reset_index(level=['tick', 'obs'])
tick obs val
tag
C 2016-02-26 2 0.0139
A 2016-02-27 2 0.5577
C 2016-02-28 6 0.0303
Pour MultiIndex, vous pouvez extraire son sous-index en utilisant
df['si_name'] = R.index.get_level_values('si_name')
Où si_name
est le nom du sous-index.
Pour apporter un peu plus de clarté, regardons un DataFrame avec deux niveaux dans son index (un MultiIndex).
index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'],
['North', 'South']],
names=['State', 'Direction'])
df = pd.DataFrame(index=index,
data=np.random.randint(0, 10, (6,4)),
columns=list('abcd'))
La méthode reset_index
, appelée avec les paramètres par défaut, convertit tous les niveaux d'index en colonnes et utilise un simple RangeIndex
comme nouvel index.
df.reset_index()
Utilisez le paramètre level
pour contrôler les niveaux d'index convertis en colonnes. Si possible, utilisez le nom du niveau, qui est plus explicite. Si il n'y a pas de niveau noms, Vous pouvez vous référer à chaque niveau par son emplacement entier, qui commence à 0 de l'extérieur. Vous pouvez utiliser une valeur scalaire ou une liste de tous les index que vous souhaitez réinitialiser.
df.reset_index(level='State') # same as df.reset_index(level=0)
Dans les rares cas où vous souhaitez conserver l'index et le tour de l'indice dans une colonne, vous pouvez effectuer les opérations suivantes:
# for a single level
df.assign(State=df.index.get_level_values('State'))
# for all levels
df.assign(**df.index.to_frame())