[英]Pandas sorting MultiIndex after concatenate
When I create a multi-indexed table in one shot, sortlevel() works as expected. 当我一次创建一个多索引表时,sortlevel()按预期工作。 However, if I concatenate multiple tables to create the same multi-indexed table, I cannot sortlevel() anymore.
但是,如果我连接多个表来创建相同的多索引表,我就不能再排序()。 Full example below:
完整示例如下:
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)
I expect both of these to produce: 我希望这两个产生:
country name
first 0 Albania Jeff
second 1 Zimbabwe Fred
However, I only get that for "working". 但是,我只是为了“工作”而得到这个。 Anyone knows what I am doing wrong ?
谁知道我做错了什么? Using pandas 0.19.2
使用熊猫0.19.2
Try this ? 试试这个 ?
working.sort_index()
Out[702]:
country name
first 0 Albania Jeff
second 1 Zimbabwe Fred
or to be more specific 或者更具体
working.sort_index(level=[0, 1], ascending=[True, False])
EDIT: Your multiple index labels show as below. 编辑:您的多个索引标签显示如下。
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]])
So if you want the not_working
sort work : 所以如果你想要
not_working
排序工作:
not_working.sort_index(level=[0, 1], ascending=[False, False])
Out[567]:
country name
first 0 Albania Jeff
second 1 Zimbabwe Fred
sortlevel() is deprecated so try to use sort_index() 不推荐使用sortlevel(),所以尝试使用sort_index()
not_working.sort_index(level = 1)
And 和
working.sort_index(level = 1)
You get 你得到
country name
first 0 Albania Jeff
second 1 Zimbabwe Fred
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.