让我们看到下面的数据框架,其中包含多个索引列
import numpy as np
import pandas as pd
a = ['i', 'ii']
b = list('abc')
mi = pd.MultiIndex.from_product([a,b])
df = pd.DataFrame(np.arange(100,100+len(mi)*3).reshape([-1,len(mi)]),
columns=mi)
print(df)
# i ii
# a b c a b c
# 0 100 101 102 103 104 105
# 1 106 107 108 109 110 111
# 2 112 113 114 115 116 117
.loc[]
和
pd.IndexSlice
我尝试选择列
'c'
'b'
正是在这种情况下。
idx = pd.IndexSlice
df.loc[:, idx[:, ['c','b']]]
# i ii
# b c b c
# 0 101 102 104 105
# 1 107 108 110 111
# 2 113 114 116 117
以下是我的问题:
-
为什么大熊猫不保存这种秩序?我认为这很危险,因为名单
['c', 'b']
意味着从用户的角度进行排序。
-
如何通过
loc[]
同时保持有序性?
更新:(02.02.2020)
pandas bug
. 在修复过程中,,
this related issue
已确定,这解决了表达式的语义歧义,如
df.loc[:, pd.IndexSlice[:, ['c','b']]]
同时,可以使用公认答案中描述的方法来回避这个问题。