2016-07-23 13 views
20

Tôi có một bảng tính như thế này:Gấu trúc có thể sử dụng cột làm chỉ mục không?

Locality 2005 2006 2007 2008 2009 

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

Tôi không muốn tự trao đổi các cột với hàng. nó có thể là có thể sử dụng dữ liệu gấu trúc đọc vào một danh sách như thế này:

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

có thể trùng lặp của [Định nghĩa lại chỉ số trong một đối tượng Pandas DataFrame] (https://stackoverflow.com/questions/10457584/redefining-the-index-in-a-pandas-dataframe-object) –

+0

Tôi sẽ không đồng ý. Mặc dù bản chất của câu hỏi là tương tự (và do đó cũng là câu trả lời là), mọi người sẽ tìm kiếm một cái gì đó giống như câu hỏi này khi họ muốn 'tạo cột cho chỉ mục'. – mhoff

Trả lời

49

Vâng, với set_index bạn có thể làm Locality chỉ số hàng của bạn.

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

Nếu inplace=True không được cung cấp, set_index trả về dataframe sửa đổi như vậy.

Ví dụ:

> 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

Bạn có thể thay đổi các chỉ số như được giải thích đã sử dụng set_index. Bạn không cần phải tự trao đổi hàng với các cột, có một chuyển vị (data.T) phương pháp trong gấu trúc nào đó cho bạn:

> 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 

sau đó bạn có thể lấy các giá trị cột dataframe và chuyển chúng vào một danh sách :

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

[427000, 448000] 
Các vấn đề liên quan