it-swarm.com.de

Wie konvertiere ich den Index eines Pandas-Datenrahmens in eine Spalte?

Dies scheint ziemlich offensichtlich, aber ich kann nicht herausfinden, wie ich einen Index des Datenrahmens in eine Spalte konvertieren kann.

Zum Beispiel:

df=
        gi       ptt_loc
 0  384444683      593  
 1  384444684      594 
 2  384444686      596  

Zu,

df=
    index1    gi       ptt_loc
 0  0     384444683      593  
 1  1     384444684      594 
 2  2     384444686      596  
278
msakya

entweder:

df['index1'] = df.index

oder, .reset_index :

df.reset_index(level=0, inplace=True)

wenn Sie also einen Multi-Index-Frame mit 3 Indexebenen haben, z.

>>> 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 möchten die 1. (tick) und die 3. (obs) Ebene des Index in Spalten konvertieren, würden 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
482
behzad.nouri

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

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

dabei ist si_name der Name des Subindex.

24
Apogentus

Um mehr Klarheit zu schaffen, betrachten wir einen DataFrame mit zwei Ebenen in seinem Index (einem 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'))

 enter image description here

Die reset_index-Methode, die mit den Standardparametern aufgerufen wird, konvertiert alle Indexebenen in Spalten und verwendet eine einfache RangeIndex als neuen Index.

df.reset_index()

 enter image description here

Mit dem Parameter level können Sie steuern, welche Indexebenen in Spalten konvertiert werden. Verwenden Sie nach Möglichkeit den Ebenennamen, der expliziter ist. Wenn keine Ebenennamen vorhanden sind, können Sie auf jede Ebene anhand ihrer ganzzahligen Position verweisen, die von außen bei 0 beginnt. Sie können hier einen Skalarwert oder eine Liste aller Indizes verwenden, die Sie zurücksetzen möchten.

df.reset_index(level='State') # same as df.reset_index(level=0)

 enter image description here

In dem seltenen Fall, dass Sie den Index beibehalten und den Index in eine Spalte umwandeln möchten, können Sie Folgendes tun:

# for a single level
df.assign(State=df.index.get_level_values('State'))

# for all levels
df.assign(**df.index.to_frame())
12
Ted Petrou

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

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

oder um es 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
2
bunji

rename_axis + reset_index

Sie können Ihren Index zunächst in ein gewünschtes Label umbenennen, und dann zu einer Serie hochstufen:

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

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
1
jpp
df1 = pd.DataFrame({"gi":[232,66,34,43],"ptt":[342,56,662,123]})
p = df1.index.values
df1.insert( 0, column="new",value = p)
df1

    new     gi     ptt
0    0      232    342
1    1      66     56 
2    2      34     662
3    3      43     123
0
Avneesh Hota