当我试图分割两个级别的multiIndex...Any帮助时,我收到了一条意外的错误消息。请看附的密码..。
我正在运行Python3.7.1和Pandas 0.23.4
我有这个数据:
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正如您在下面看到的,我可以将数据分割成一个级别,而不存在任何问题:
dfls.loc[(('Ada','Quinn'),('Math','Chemistry')),('Labs',('I','IV'))]得到:
Labs
I IV
Student Course
Ada Chemistry 76 79
Math 78 81
Quinn Chemistry 81 84
Math 80 83 但当我试着用两个不同的层次:
dfls.loc[(('Ada','Quinn'),('Math','Chemistry')),[('Exams',('I','III')),
('Labs',('II','IV'))]]我收到以下错误消息:
ValueError: setting an array element with a sequence我如何避免这个错误信息并得到我正在寻找的结果?提前感谢你..。
发布于 2018-12-27 20:38:00
您需要传递一个元组列表,以便对列进行切片。
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?上阅读更多关于基于多索引的切片的内容。
发布于 2018-12-27 23:42:52
现在我明白了,多亏了@冷速答案,我要找的唯一答案是:
dfls.loc[(('Ada','Quinn'),('Math','Chemistry')), [('Exams', 'I'), ('Exams', 'III'), ('Labs', 'II'), ('Labs', 'IV')] ]
https://stackoverflow.com/questions/53950480
复制相似问题