2015-12-15 121 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