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  
246
demandé sur Brian Tompsett - 汤莱恩 2013-12-09 04:34:16

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
416
répondu behzad.nouri 2018-03-23 02:20:50

Pour MultiIndex, vous pouvez extraire son sous-index en utilisant

df['si_name'] = R.index.get_level_values('si_name') 

si_name est le nom du sous-index.

23
répondu Apogentus 2015-06-26 14:13:58

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'))

entrez la description de l'image ici

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()

entrez la description de l'image ici

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)

entrez la description de l'image ici

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())
10
répondu Ted Petrou 2017-10-24 22:04:27