首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在切片两个不同级别的multiIndex时出错

在切片两个不同级别的multiIndex时出错
EN

Stack Overflow用户
提问于 2018-12-27 20:23:28
回答 2查看 87关注 0票数 1

当我试图分割两个级别的multiIndex...Any帮助时,我收到了一条意外的错误消息。请看附的密码..。

我正在运行Python3.7.1和Pandas 0.23.4

我有这个数据:

代码语言:javascript
复制
import pandas as pd
import itertools
index = list(itertools.product(['Ada','Quinn','Violet','Juan'],['Physics', 
    'Chemistry','Math','English']))
headr = list(itertools.product(['Exams','Labs', 'Particip'], 
    ['I','II','III','IV']))
indx = pd.MultiIndex.from_tuples(index,names=['Student','Course'])
cols = pd.MultiIndex.from_tuples(headr) #Notice these are un-named
data = [[70+x+y+(x*y)%3 for x in range(12)] for y in range(16)]
df = pd.DataFrame(data,indx,cols)
dfls=df.sort_index(level=0);dfls

正如您在下面看到的,我可以将数据分割成一个级别,而不存在任何问题:

代码语言:javascript
复制
dfls.loc[(('Ada','Quinn'),('Math','Chemistry')),('Labs',('I','IV'))]

得到:

代码语言:javascript
复制
                            Labs
                            I   IV
Student     Course      
Ada         Chemistry       76  79
            Math            78  81
Quinn       Chemistry       81  84
            Math            80  83   

但当我试着用两个不同的层次:

代码语言:javascript
复制
dfls.loc[(('Ada','Quinn'),('Math','Chemistry')),[('Exams',('I','III')), 
('Labs',('II','IV'))]]

我收到以下错误消息:

代码语言:javascript
复制
ValueError: setting an array element with a sequence

我如何避免这个错误信息并得到我正在寻找的结果?提前感谢你..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-27 20:38:00

您需要传递一个元组列表,以便对列进行切片。

代码语言:javascript
复制
idx = (('Ada','Quinn'),('Math','Chemistry'))
cols = [('Exams', 'I'), ('Exams', 'III'), ('Labs', 'II'), ('Labs', 'IV')] 
dfls.loc[idx, cols]

                  Exams     Labs    
                      I III   II  IV
Student Course                      
Ada     Chemistry    71  75   78  79
        Math         72  75   78  81
Quinn   Chemistry    75  78   81  84
        Math         76  78   81  83

索引的标签之所以简化,是因为您正在为每个级别划分相同的子级别。列的情况并非如此,因此您需要分别列出每一列。

您可以在How do I slice or filter MutliIndex DataFrame levels?上阅读更多关于基于多索引的切片的内容。

票数 4
EN

Stack Overflow用户

发布于 2018-12-27 23:42:52

现在我明白了,多亏了@冷速答案,我要找的唯一答案是:

dfls.loc[(('Ada','Quinn'),('Math','Chemistry')), [('Exams', 'I'), ('Exams', 'III'), ('Labs', 'II'), ('Labs', 'IV')] ]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53950480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档