python-使用.loc访问多索引数据框时如何保留列顺序?
作者:互联网
让我们得到以下具有多索引列的数据框
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 []访问列?
解决方法:
引用此link:
I don’t think we make guarantees about the order of returned values
from a .loc operation so I am inclined to say this is not a bug but
let’s see what others say
因此,我们应该改用reindex:
df.reindex(columns=pd.MultiIndex.from_product([a,['c','b']]))
i ii
c b c b
0 102 101 105 104
1 108 107 111 110
2 114 113 117 116
标签:multi-index,pandas,python 来源: https://codeday.me/bug/20191108/2007218.html