2017-09-11 24 views
6

Khi tôi tạo bảng đa chỉ mục trong một lần chụp, sortlevel() hoạt động như mong đợi. Tuy nhiên, nếu tôi nối nhiều bảng để tạo cùng một bảng đa chỉ mục, tôi không thể sắp xếp lại() nữa. Full ví dụ dưới đây:Pandas sắp xếp MultiIndex sau khi ghép nối

import pandas as pd 
a=pd.DataFrame({'country':'Zimbabwe','name':'Fred'}, index=[1]) 
b=pd.DataFrame({'country':'Albania','name':'Jeff'}, index=[0]) 
not_working = pd.concat([a,b],keys=['second','first']) 
working = pd.DataFrame({'country':['Zimbabwe','Albania'],'name':['Fred','Jeff']}, index=pd.MultiIndex.from_tuples([('second',1),('first',0)])) 

not_working_sorted = not_working.sortlevel(0) 
working_sorted = working.sortlevel(0) 

Tôi hy vọng cả hai để sản xuất:

  country name 
first 0 Albania Jeff 
second 1 Zimbabwe Fred 

Tuy nhiên, tôi chỉ nhận được rằng cho "làm việc". Có ai biết tôi đang làm gì sai không? Sử dụng gấu trúc 0.19.2

+0

Chỉnh sửa: Tôi nghĩ tôi thấy gợi ý. Nhìn vào chỉ số làm việc và not_working, tôi thấy điều này: working.index = MultiIndex (cấp = [[u'first ', u giây'], [0, 1]], nhãn = [[1, 0], [1, 0]]). Nhưng not_working.index = MultiIndex (cấp = [[u giây ', u'first'], [0, 1]], nhãn = [[0, 1], [1, 0]]) – user3076411

+0

Hình như sắp xếp chỉ mục hoạt động không theo thứ tự bảng chữ cái của nhãn của chỉ mục mà chỉ theo thứ tự mà chúng xuất hiện trong chỉ mục. Có anyway tôi có thể thay đổi điều này? – user3076411

Trả lời

4

Thử cái này?

working.sort_index() 
Out[702]: 
      country name 
first 0 Albania Jeff 
second 1 Zimbabwe Fred 

hoặc cụ thể hơn

working.sort_index(level=[0, 1], ascending=[True, False]) 

EDIT: nhiều nhãn chỉ số của bạn hiển thị như dưới đây.

not_working.index 
Out[565]: 
MultiIndex(levels=[['second', 'first'], [0, 1]], 
      labels=[[0, 1], [1, 0]]) 
working.index 
Out[566]: 
MultiIndex(levels=[['first', 'second'], [0, 1]], 
      labels=[[1, 0], [1, 0]]) 

Vì vậy, nếu bạn muốn làm việc not_working loại:

not_working.sort_index(level=[0, 1], ascending=[False, False]) 
Out[567]: 
      country name 
first 0 Albania Jeff 
second 1 Zimbabwe Fred 
+1

Ồ, tôi thấy điều này bây giờ – Vaishali

+0

sort_index không giải quyết được sự cố của tôi. Bạn đã thử nó trên "làm việc", nhưng khi thử nó trên "not_working", nó không cho kết quả tương tự. – user3076411

+0

@ user3076411 bạn có thể thử 'not_working.sort_index (level = [0, 1], tăng dần = [False, False])' – Wen

3

sortlevel() bị phản đối vì vậy hãy thử sử dụng sort_index()

not_working.sort_index(level = 1) 

working.sort_index(level = 1) 

Bạn nhận được

  country  name 
first 0 Albania  Jeff 
second 1 Zimbabwe Fred 
+0

Tôi thậm chí không biết chức năng này 'sortlevel' :), cảm ơn bạn đã làm rõ :) – Wen

+1

Không nhận thấy rằng' sortlevel() 'đã không được chấp nhận, cảm ơn và ++ ;-) – MaxU

+0

@MaxU, chỉ cần những gì người ta cần vào chiều thứ Hai nhàm chán: D – Vaishali

Các vấn đề liên quan