2015-12-15 67 views
2

,我有以下數據:如何重新排列在多個索引列熊貓

Set Adjuvant Route Organ Up Down 
set7 FOO ID LV 11 14 
set7 BAR ID LV 17 15 
set7 QUX ID LV 10 22 
set7 FOO ID SP 14 13 
set7 BAR ID SP 13 8 
set7 QUX ID SP 11 18 
set7 FOO ID LN 25 25 
set7 BAR ID LN 38 16 
set7 QUX ID LN 53 18 

我已閱讀並用下面的代碼重新組織:

import pandas as pd 
df = pd.io.parsers.read_table("http://dpaste.com/3QB2YQX.txt") 
df = df.pivot(index="Adjuvant",columns="Organ") 

# Remove unwanted index name 
df.drop('Set',axis=1,inplace=True) 
df.drop('Route',axis=1,inplace=True) 
df.index.name = None 
df.columns.names = (None,None) 

ndf = df.reindex(sorted(df.index, key=lambda x: x.lower())) 

這使得這個數據幀:

In [35]: ndf 
Out[35]: 
    Up   Down 
    LN LV SP LN LV SP 
BAR 38 17 13 16 15 8 
FOO 25 11 14 25 14 13 
QUX 53 10 11 18 22 18 

我想要做的是將UP/DOWN索引下的列從LN, LV, SPLV, SP, LN。我該怎麼做?

+0

是什麼你預期的產出? –

回答

2

使用set_levels

In [3]: ndf[ndf.columns.set_levels(['LV', 'SP','LN'], level=1)] 
Out[3]: 
    Up   Down 
    LV SP LN LV SP LN 
BAR 17 13 38 15 8 16 
FOO 11 14 25 14 13 25 
QUX 10 11 53 22 18 18 

這還挺網站上的無證沒有專門的頁面,但如果你做一個標籤,查找顯示文檔字符串就說明這一點:

Signature: ndf.columns.set_levels(levels, level=None, inplace=False, verify_integrity=True) 
Docstring: 
Set new levels on MultiIndex. Defaults to returning 
new index. 

Parameters 
---------- 
levels : sequence or list of sequence 
    new level(s) to apply 
level : int or level name, or sequence of int/level names (default None) 
    level(s) to set (None for all levels) 
inplace : bool 
    if True, mutates in place 
verify_integrity : bool (default True) 
    if True, checks that levels and labels are compatible 

Returns 
------- 
new index (of same type and class...etc) 


Examples 
-------- 
>>> idx = MultiIndex.from_tuples([(1, u'one'), (1, u'two'), 
            (2, u'one'), (2, u'two')], 
            names=['foo', 'bar']) 
>>> idx.set_levels([['a','b'], [1,2]]) 
MultiIndex(levels=[[u'a', u'b'], [1, 2]], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]], 
      names=[u'foo', u'bar']) 
>>> idx.set_levels(['a','b'], level=0) 
MultiIndex(levels=[[u'a', u'b'], [u'one', u'two']], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]], 
      names=[u'foo', u'bar']) 
>>> idx.set_levels(['a','b'], level='bar') 
MultiIndex(levels=[[1, 2], [u'a', u'b']], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]], 
      names=[u'foo', u'bar']) 
>>> idx.set_levels([['a','b'], [1,2]], level=[0,1]) 
MultiIndex(levels=[[u'a', u'b'], [1, 2]], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]], 
      names=[u'foo', u'bar']) 
File:  c:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\pandas\core\index.py 
Type:  method 
+0

@jezrael不清楚你在說什麼列順序是不同的列值保留與新訂的列 – EdChum

+0

對不起,你是對的。 – jezrael

+0

@EdChum:你如何做一個標籤查找?我的意思是你使用了什麼命令? – neversaint