838 Stimmen

Wie man den Index eines Pandas-Datenrahmens in eine Spalte umwandelt

Wie konvertiert man einen Index eines DataFrame in eine Spalte?

Zum Beispiel:

        gi       ptt_loc
 0  384444683      593  
 1  384444684      594 
 2  384444686      596  

zu

    index1    gi       ptt_loc
 0  0     384444683      593  
 1  1     384444684      594 
 2  2     384444686      596

1367voto

behzad.nouri Punkte 68573

Entweder:

df['index1'] = df.index

oder .reset_index:

df = df.reset_index()

Wenn Sie ein Multi-Index-Framework mit 3 Ebenen des Index haben, wie:

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

und Sie die 1. (tick) und 3. (obs) Ebenen im Index in Spalten umwandeln möchten, könnten Sie Folgendes tun:

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

73voto

jpp Punkte 146159

rename_axis + reset_index

Sie können zuerst Ihren Index in ein gewünschtes Label umbenennen, dann zu einer Serie erheben:

df = df.rename_axis('index1').reset_index()

print(df)

   index1         gi  ptt_loc
0       0  384444683      593
1       1  384444684      594
2       2  384444686      596

Dies funktioniert auch für MultiIndex DataFrames:

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

df = df.rename_axis(['index1', 'index2', 'index3']).reset_index()

print(df)

       index1 index2  index3     val
0  2016-02-26      C       2  0.0139
1  2016-02-27      A       2  0.5577
2  2016-02-28      C       6  0.0303

56voto

Ted Petrou Punkte 56706

Um ein wenig mehr Klarheit zu schaffen, werfen wir einen Blick auf ein DataFrame mit zwei Ebenen in seinem Index (einem MultiIndex).

index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'], 
                                    ['Norden', 'Süden']], 
                                   names=['Bundesland', 'Richtung'])

df = pd.DataFrame(index=index, 
                  data=np.random.randint(0, 10, (6,4)), 
                  columns=list('abcd'))

Bildbeschreibung hier eingeben

Die reset_index Methode, aufgerufen mit den Standardparametern, konvertiert alle Indexebenen in Spalten und verwendet einen einfachen RangeIndex als neuen Index.

df.reset_index()

Bildbeschreibung hier eingeben

Verwenden Sie den level Parameter, um zu steuern, welche Indexebenen in Spalten umgewandelt werden. Wenn möglich, verwenden Sie den Ebenennamen, der expliziter ist. Wenn es keine Ebenennamen gibt, können Sie auf jede Ebene anhand ihrer ganzzahligen Position verweisen, die bei 0 von außen beginnt. Sie können hier einen skalaren Wert oder eine Liste aller Indizes verwenden, die Sie zurücksetzen möchten.

df.reset_index(level='Bundesland') # gleichbedeutend mit df.reset_index(level=0)

Bildbeschreibung hier eingeben

Falls Sie in dem seltenen Fall die den Index beibehalten und den Index in eine Spalte umwandeln möchten, können Sie folgendes tun:

# für eine einzelne Ebene
df.assign(Bundesland=df.index.get_level_values('Bundesland'))

# für alle Ebenen
df.assign(**df.index.to_frame())

43voto

Apogentus Punkte 5981

Für MultiIndex können Sie das Subindex extrahieren mit

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

wo si_name der Name des Subindex ist.

15voto

bunji Punkte 5113

Wenn Sie die Methode reset_index verwenden und Ihren vorhandenen Index beibehalten möchten, sollten Sie verwenden:

df.reset_index().set_index('index', drop=False)

oder um es direkt zu ändern:

df.reset_index(inplace=True)
df.set_index('index', drop=False, inplace=True)

Zum Beispiel:

print(df)
          gi  ptt_loc
0  384444683      593
4  384444684      594
9  384444686      596

print(df.reset_index())
   index         gi  ptt_loc
0      0  384444683      593
1      4  384444684      594
2      9  384444686      596

print(df.reset_index().set_index('index', drop=False))
       index         gi  ptt_loc
index
0          0  384444683      593
4          4  384444684      594
9          9  384444686      596

Und wenn Sie das Index-Label loswerden möchten, können Sie Folgendes tun:

df2 = df.reset_index().set_index('index', drop=False)
df2.index.name = None
print(df2)
   index         gi  ptt_loc
0      0  384444683      593
4      4  384444684      594
9      9  384444686      596

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X