2016-07-23 11 views
20

Mam arkusz tak:Czy pandy mogą używać kolumny jako indeksu?

Locality 2005 2006 2007 2008 2009 

ABBOTSFORD 427000 448000 602500 600000 638500 
ABERFELDIE 534000 600000 735000 710000 775000 
AIREYS INLET459000 440000 430000 517500 512500 

nie chcę ręcznie zamienić kolumny z rzędu. Czy to możliwe, aby korzystać z danych pandy czytanie listy jak to:

data['ABBOTSFORD']=[427000,448000,602500,600000,638500] 
data['ABERFELDIE']=[534000,600000,735000,710000,775000] 
data['AIREYS INLET']=[459000,440000,430000,517500,512500] 
+0

Możliwe duplikat [Przedefiniowanie indeks w obiekcie Pandy DataFrame] (https://stackoverflow.com/questions/10457584/redefining-the-index-in-a-pandas-dataframe-object) –

+0

Nie zgodziłbym się. Mimo że istota pytania jest podobna (a zatem również odpowiedź), ludzie będą szukać czegoś takiego jak to pytanie, gdy chcą "utworzyć kolumnę do indeksu". – mhoff

Odpowiedz

49

Tak, z set_index można dokonać Locality indeks wiersza.

data.set_index('Locality', inplace=True) 

Jeśli inplace=True nie jest, set_index zwraca zmodyfikowany dataframe wyniku.

Przykład:

> import pandas as pd 
> df = pd.DataFrame([['ABBOTSFORD', 427000, 448000], 
        ['ABERFELDIE', 534000, 600000]], 
        columns=['Locality', 2005, 2006]) 

> df 
    Locality 2005 2006 
0 ABBOTSFORD 427000 448000 
1 ABERFELDIE 534000 600000 

> df.set_index('Locality', inplace=True) 
> df 
       2005 2006 
Locality     
ABBOTSFORD 427000 448000 
ABERFELDIE 534000 600000 

> df.loc['ABBOTSFORD'] 
2005 427000 
2006 448000 
Name: ABBOTSFORD, dtype: int64 

> df.loc['ABBOTSFORD'][2005] 
427000 

> df.loc['ABBOTSFORD'].values 
array([427000, 448000]) 

> df.loc['ABBOTSFORD'].tolist() 
[427000, 448000] 
2

można zmienić indeks jak wyjaśniono już przy użyciu set_index. Nie trzeba ręcznie zamienić wiersze z kolumnami, jest transpozycja (data.T) metoda w pand, że robi to dla ciebie:

> df = pd.DataFrame([['ABBOTSFORD', 427000, 448000], 
        ['ABERFELDIE', 534000, 600000]], 
        columns=['Locality', 2005, 2006]) 

> newdf = df.set_index('Locality').T 
> newdf 

Locality ABBOTSFORD ABERFELDIE 
2005  427000  534000 
2006  448000  600000 

następnie można pobrać wartości kolumny dataframe i przekształcać je do listy :

> newdf['ABBOTSFORD'].values.tolist() 

[427000, 448000] 
Powiązane problemy