2016-03-19 18 views
1

Dönüştürülmüş bir pivotun sonucu olan hiyerarşik sıralı bir veri çerçevem ​​var. İkinci satır dizini bir sayıdır ve artan sırada sıralanır (bu benim istediğim şeydir), ancak ilk satır dizini bir dizedir ve alfabetik olarak sıralanır (ki istemiyorum). Benzer şekilde, sütun adları dizelerdir ve istemediğim alfabetik olarak sıralanır.Pandalar: Verilen bir sıradaki satır ve sütunlarla döndürme

Veri çerçevesini, satır ve sütunların istediğim sırada görünmesi için nasıl yeniden düzenleyebilirim? Olsa da tek şey, onları yeniden adlandırmak için başlangıçta bir sayı eklemek, ancak dağınık ve mümkünse bunu önlemek isterim.

Verilerimin nasıl göründüğünün en az bir örneği aşağıdadır. Moderatörler için: Benzer soruları sordum, ancak bu çözümlerden herhangi birini çoklu indeksime uygulayamadım.

import pandas as pd 
import numpy as np 

consdf=pd.DataFrame() 

for mylocation in ['North','South']: 
    for scenario in np.arange(1,4): 
     df= pd.DataFrame() 
     df['mylocation'] = [mylocation] 
     df['scenario']= [scenario] 
     df['this'] = np.random.randint(10,100) 
     df['that'] = df['this'] * 2 
     df['something else'] = df['this'] * 3 
     consdf=pd.concat((consdf, df), axis=0, ignore_index=True) 

mypiv = consdf.pivot('mylocation','scenario').transpose() 
+0

İstediğiniz sipariş hakkında konuşmaya devam ama asla bunun ne olduğunu açıklamak: ilk geçtiği emriyle kümenizdeki , olabilir? (Ayrıca, örneğinizde, indeksin ilk sütunu * değil * pivottan sonra alfabetik olarak sıralanmıştır: "bu", "bu", "başka bir şey", "başka bir şey" değil "," , "bu" '. Neyi özlüyorum?) – DSM

+0

Üzgünüm, belirsiz olsaydım. Gerçek kodumda, mylocation sıralı bir koleksiyon olduğundan, sonuçları nesnelere eklediğimle aynı sırada istiyorum. Satırlara gelince, onları belirttiğim bir sırayla istiyorum: Diyelim ki istediğim siparişle bir listem var ve bunu uygulamak istiyorum. Çok teşekkürler –

cevap

2

reindex o içindir fonksiyon, sadece sütunları yönetmek uyum:

In [1]: mypiv 
Out[1]: 
mylocation    North South 
       scenario    
this   1   24  11 
       2   19  53 
       3   11  92 
that   1   48  22 
       2   38 106 
       3   22 184 
something else 1   72  33 
       2   57 159 
       3   33 276 


In [2]: mypiv.reindex(['that', 'this', 'something else'], level=0) \ 
.T.reindex(['South','North']).T 
Out[2]: 
mylocation    South North 
       scenario    
that   1   90  34 
       2   50 104 
       3   100 170 
this   1   45  17 
       2   25  52 
       3   50  85 
something else 1   135  51 
       2   75 156 
       3   150 255 
İlgili konular