ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-使用.loc访问多索引数据框时如何保留列顺序?

2019-11-08 09:57:44  阅读:302  来源: 互联网

标签:multi-index pandas python


让我们得到以下具有多索引列的数据框

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有