2017-01-31 40 views
28

Có cách nào để sắp xếp lại các cột trong khung dữ liệu gấu trúc dựa trên sở thích cá nhân của tôi (tức là không sắp xếp theo thứ tự bảng chữ cái hoặc số, nhưng giống như tuân theo các quy ước nhất định)?Đặt thứ tự cột trong khung dữ liệu gấu trúc

đơn giản ví dụ:

frame = pd.DataFrame({ 
     'one thing':[1,2,3,4], 
     'second thing':[0.1,0.2,1,2], 
     'other thing':['a','e','i','o']}) 

sản xuất này:

one thing other thing second thing 
0   1   a   0.1 
1   2   e   0.2 
2   3   i   1.0 
3   4   o   2.0 

Nhưng thay vào đó, tôi sẽ như thế này:

one thing second thing other thing 
0   1   0.1   a 
1   2   0.2   e 
2   3   1.0   i 
3   4   2.0   o 

(Xin vui lòng, cung cấp một giải pháp chung chung chứ không phải là đặc trưng cho trường hợp này. Rất cám ơn.)

Trả lời

38

Chỉ cần chọn thứ tự mình bằng cách nhập vào tên cột. Lưu ý các dấu ngoặc kép:

frame = frame[['column I want first', 'column I want second'...etc.]] 
10

Bạn cũng có thể làm điều gì đó như df = df[['x', 'y', 'a', 'b']]

import pandas as pd 
frame = pd.DataFrame({'one thing':[1,2,3,4],'second thing':[0.1,0.2,1,2],'other thing':['a','e','i','o']}) 
frame = frame[['second thing', 'other thing', 'one thing']] 
print frame 
    second thing other thing one thing 
0   0.1   a   1 
1   0.2   e   2 
2   1.0   i   3 
3   2.0   o   4 

Ngoài ra, bạn có thể nhận được danh sách các cột với:

cols = list(df.columns.values) 

Sản lượng sẽ tạo ra một cái gì đó như này:

['x', 'y', 'a', 'b'] 

Sau đó dễ dàng sắp xếp lại theo cách thủ công.

5

Bạn cũng có thể sử dụng OrderedDict:

In [183]: from collections import OrderedDict 

In [184]: data = OrderedDict() 

In [185]: data['one thing'] = [1,2,3,4] 

In [186]: data['second thing'] = [0.1,0.2,1,2] 

In [187]: data['other thing'] = ['a','e','i','o'] 

In [188]: frame = pd.DataFrame(data) 

In [189]: frame 
Out[189]: 
    one thing second thing other thing 
0   1   0.1   a 
1   2   0.2   e 
2   3   1.0   i 
3   4   2.0   o 
8

Xây dựng nó với một danh sách thay vì một từ điển

frame = pd.DataFrame([ 
     [1, .1, 'a'], 
     [2, .2, 'e'], 
     [3, 1, 'i'], 
     [4, 4, 'o'] 
    ], columns=['one thing', 'second thing', 'other thing']) 

frame 

    one thing second thing other thing 
0   1   0.1   a 
1   2   0.2   e 
2   3   1.0   i 
3   4   4.0   o 
7

Bạn có thể sử dụng này:

columnsTitles = ['onething', 'secondthing', 'otherthing'] 

frame.reindex(columns=columnsTitles) 
Các vấn đề liên quan