2015-04-24 5 views
8

मैं एक पांडा डेटाफ्रेम में पुन: व्यवस्थित/स्वैपवेल/पिवोट/कुछ कॉलम करने का प्रयास कर रहा हूं। कॉलम एक मल्टीइंडेक्स हैं, लेकिन मुझे सॉस नहीं मिल रहा है जो मैं चाहता हूं।मैं ऑर्डर/ग्रुपिंग/पांडा मल्टीइंडेक्स कॉलम का स्तर कैसे बदलूं?

मेरे मल्टीइंडेक्स में सबसे तेज़ भिन्न कॉलम महीना है, लेकिन मैं इसे सबसे धीमा भिन्न कॉलम बनाना चाहता हूं।

मैं एक nbviewer नोटबुक मिल गया है, तो आप अपने आप को इसे आज़माने के लिए करना चाहते हैं: http://nbviewer.ipython.org/gist/flamingbear/4cfac24c80fe34a67474

मैं क्या है:

+-------------------------------------------------------------------+ 
|+-----+------+------+-----+------+-----+-----+------+-----+-----+ | 
||  |weight    |extent   |rank    || 
|+-----+------+------+-----+------+-----+-----+------+-----+-----+ | 
||month|'1Jan'|'Feb' |'Mar'|'1Jan'|'Feb'|'Mar'|'1Jan'|'Feb'|'Mar'| | 
|+-----+------+------+-----+------+-----+-----+------+-----+-----+ | 
||year |  |  |  |  |  |  |  |  |  | | 
|+-----+------+------+-----+------+-----+-----+------+-----+-----+ | 
||2000 |45.1 |46.1 |25.1 |13.442|14.94|15.02|13 |17 |14 | | 
|+-----+------+------+-----+------+-----+-----+------+-----+-----+ | 
||2001 |85.0 |16.0 |49.0 |13.380|14.81|15.14|12 |15 |17 | | 
|+-----+------+------+-----+------+-----+-----+------+-----+-----+ | 
||2002 |90.0 |33.0 |82.0 |13.590|15.13|14.88|15 |22 |10 | | 
|+-----+------+------+-----+------+-----+-----+------+-----+-----+ | 
||2003 |47.0 |34.0 |78.0 |13.640|14.83|15.27|17 |16 |22 | | 
|+-----+------+------+-----+------+-----+-----+------+-----+-----+ | 
+-------------------------------------------------------------------+ 

मैं क्या चाहता हूँ

+------------------------------------------------------------------+ 
|+-----+------+------+----+------+------+-----+------+------+----+ | 
||month|1Jan    |Feb    |Mar    || 
|+-----+------+------+----+------+------+-----+------+------+----+ | 
||  |weight|extent|rank|weight|extent|rank |weight|extent|rank| | 
|+-----+------+------+----+------+------+-----+------+------+----+ | 
||year |  |  | |  |  |  |  |  | | | 
|+-----+------+------+----+------+------+-----+------+------+----+ | 
||2000 |45.1 |13.442|13 |46.1 |14.94 |17 | 25.1 |15.02 |14 | | 
|+-----+------+------+----+------+------+-----+------+------+----+ | 
||2001 |85.0 |13.380|12 |16.0 |14.81 |15 | 49.0 |15.14 |17 | | 
|+-----+------+------+----+------+------+-----+------+------+----+ | 
||2002 |90.0 |13.590|15 |33.0 |15.13 |22 | 82.0 |14.88 |10 | | 
|+-----+------+------+----+------+------+-----+------+------+----+ | 
||2003 |47.0 |13.640|17 |34.0 |14.83 |16 | 78.0 |15.27 |22 | | 
|+-----+------+------+-----------+------+-----+------+------+----+ | 
+------------------------------------------------------------------+ 

कोई मदद सराहनीय होगा। मैं अपने मूल डेटाफ्रेम के साथ काम कर सकता हूं, लेकिन वांछित क्रम के साथ एक सीएसवी को लिखना शानदार होगा।

अग्रिम धन्यवाद, मैट

+0

http://pandas.pydata.org/ पांडा-डॉक्स/स्थिर/जेनरेट/पांडा। डेटाफ्रेम.swaplevel.html –

उत्तर

13

आपका कॉलम एक MultiIndex हैं। आप मौजूदा एक के स्तर की अदला-बदली से बनाए गए एक नए MultiIndex साथ DataFrame के स्तंभों को पुन: असाइन करने की जरूरत है:

df.columns = df.columns.swaplevel(0, 1) 
df.sortlevel(0, axis=1, inplace=True) 
>>> df 

month '1Jan'     'Feb'     'Mar'    
     weight extent rank weight extent rank weight extent rank 
year                  
2000  45.1 13.442 13 46.1 14.94 17 25.1 15.02 14 
2001  85.0 13.380 12 16.0 14.81 15 49.0 15.14 17 
2002  90.0 13.590 15 33.0 15.13 22 82.0 14.88 10 
2003  47.0 13.640 17 34.0 14.83 16 78.0 15.27 22 

फिर आप CSV में निर्यात कर सकते हैं:

df.to_csv(filename) 
+0

मेरे पास स्वैपवेल था, लेकिन सॉर्टलेवल नहीं था। बहुत धन्यवाद। –

+0

नोट, सॉर्टलेवल अब बहिष्कृत है, यह अब के माध्यम से करने योग्य है: df.sort_index (अक्ष = 1, स्तर = 0, inplace = True) – Silas

संबंधित मुद्दे