Odpowiedzi:
zarówno:
df['index1'] = df.index
lub .reset_index
:
df.reset_index(level=0, inplace=True)
więc jeśli masz ramkę z wieloma indeksami z 3 poziomami indeksu, na przykład:
>>> 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
i chcesz przekonwertować poziomy 1st ( tick
) i 3rd ( obs
) w indeksie na kolumny, zrobiłbyś:
>>> 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
df.reset_index(level=df.index.names, inplace=True)
jednego można przekonwertować cały multiindeks na kolumny
df.reset_index()
, który przenosi cały indeks do kolumn (jedna kolumna na poziom) i tworzy indeks int od 0 do len (df) -1
df['index1'] = df.index
Zwraca ostrzeżenie: „Próbuje się ustawić wartość na kopii wycinka z DataFrame”. Zamiast tego użyj funkcji df.assign (), jak pokazano poniżej.
Aby zapewnić nieco większą przejrzystość, spójrzmy na DataFrame z dwoma poziomami w indeksie (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'))
reset_index
Metoda, zwana z domyślnymi parametrami, konwertuje wszystkie poziomy indeksów na kolumny i używa prostego RangeIndex
jako nowego indeksu.
df.reset_index()
Za pomocą tego level
parametru można kontrolować, które poziomy indeksu są konwertowane na kolumny. Jeśli to możliwe, użyj nazwy poziomu, która jest bardziej wyraźna. Jeśli nie ma nazw poziomów, możesz odwoływać się do każdego poziomu przez jego liczbę całkowitą, która zaczyna się od 0 od zewnątrz. Możesz użyć tutaj wartości skalarnej lub listy wszystkich indeksów, które chcesz zresetować.
df.reset_index(level='State') # same as df.reset_index(level=0)
W rzadkim przypadku, gdy chcesz zachować indeks i przekształcić go w kolumnę, możesz wykonać następujące czynności:
# for a single level
df.assign(State=df.index.get_level_values('State'))
# for all levels
df.assign(**df.index.to_frame())
rename_axis
+ reset_index
Możesz najpierw zmienić nazwę indeksu na pożądaną etykietę, a następnie przejść do serii:
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
Działa to również w przypadku MultiIndex
ramek danych:
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
Jeśli chcesz użyć tej reset_index
metody, a także zachować istniejący indeks, powinieneś użyć:
df.reset_index().set_index('index', drop=False)
lub zmienić to na miejscu:
df.reset_index(inplace=True)
df.set_index('index', drop=False, inplace=True)
Na przykład:
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
A jeśli chcesz pozbyć się etykiety indeksu, możesz:
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
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
Bardzo prostym sposobem na to jest użycie metody reset_index (). W przypadku ramki danych df użyj poniższego kodu:
df.reset_index(inplace=True)
W ten sposób indeks stanie się kolumną, a użycie wartości „inplace” jako „True” spowoduje zmianę na stałe.