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