2013-12-09 9 views
180

Wydaje się to dość oczywiste, ale nie mogę się domyślić, w jaki sposób mogę przekonwertować indeks ramki danych na kolumnę?Jak przekonwertować indeks pandy w ramce danych do kolumny?

Na przykład

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

do,

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

Odpowiedz

317

albo:

df['index1'] = df.index 

lub .reset_index:

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

więc, jeśli masz ramę multi-index z 3 poziomów indeksu, takich jak:

>>> 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ć 1st (tick) i 3 miejsce (obs) poziomów w indeksie pod kolumny, by zrobić:

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

pamiętać, że trzeba wykonaj to n razy dla każdego indeksu, który posiadasz (np. jeśli masz dwa indeksy, to musisz zrobić to dwa razy) – dval

+7

Z 'df.reset_index (level = df.index.names, inplace = True)' można przekonwertować dane całe multiindeksy w kolumny – venti

+1

Czy możesz mieć indeks w kolumnie? właśnie dodane do ramki danych, więc jest to prawdziwa kolumna I indeks? – bretcj7

22

Dla MultiIndex można wyodrębnić jego subindeks użyciu

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

gdzie si_name jest nazwą podindeksu.

3

Aby uzyskać nieco więcej klarowności, 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')) 

enter image description here

Sposób reset_index, zwany z domyślnymi parametrami, konwertuje wszystkie poziomy indeksów na kolumny i używa prostego RangeIndex jako nowego indeksu.

df.reset_index() 

enter image description here

pomocą parametru level kontrolować którym wskaźnik poziomów przekształcony kolumn. Jeśli to możliwe, użyj nazwy poziomu, która jest bardziej wyraźna. Jeśli nie ma nazw poziomów, można odnieść się do każdego poziomu poprzez jego całkowitą lokalizację, która zaczyna się od 0 z zewnątrz. Możesz użyć wartości skalarnej tutaj lub listy wszystkich indeksów, które chcesz zresetować.

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

enter image description here

W rzadkim przypadku, gdy chcesz zachować indeks i włączyć indeks do kolumny, można 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()) 
Powiązane problemy