我正在尝试在带有MultiIndex的pandas数据帧上使用切片器:
dates = pd.date_range('6/30/2000', periods=12, freq='M')
index = MultiIndex.from_arrays([dates, list('HIJKHIJKHIJKHIJK')], names=['date', 'id'])
df = DataFrame(randn(12, 4), index=index, columns=['A', 'B', 'C', 'D'])
我想获取id='H'
的行。在我提出的相关问题this comment中,以及在阅读the documentation后,我想到了这一点:
df.loc[(slice(None), 'H'),:]
或者也许这样:
df.loc[(slice(None), ['H']),:]
会奏效。第一个返回此错误:
IndexError:索引12超出了轴1的大小为12
,第二个给出了这个错误:
IndexError:指数超出范围
从其他问题看,我想也许我需要在尝试切片前按二级索引排序。我不确定我在这里做了什么,但我尝试使用df.sort_index()
但是我的语法有问题。我也不确定这是否是问题。
答案 0 :(得分:0)
你的行中有问题
index = MultiIndex.from_arrays([dates, list('HIJKHIJKHIJKHIJK')], names=['date', 'id'])
数组的长度应相同。这不是提高可能是一个错误。
如果您修复了
之一In [58]: df.xs('H', level='id')
Out[58]:
A B C D
date
2000-06-30 -0.645203 0.965441 0.150037 -0.083979
2000-10-31 -1.222954 0.498284 -1.249005 -1.664407
2001-02-28 -0.941248 2.025381 0.450256 1.182266
In [59]: df.loc[(slice(None), 'H'), :]
Out[59]:
A B C D
date id
2000-06-30 H -0.645203 0.965441 0.150037 -0.083979
2000-10-31 H -1.222954 0.498284 -1.249005 -1.664407
2001-02-28 H -0.941248 2.025381 0.450256 1.182266
应该有效,具体取决于您是否要放弃id
级别。