这个问题在这里部分是为了帮助我了解多数索引的lex sorting是什么。
说我有一些多索引数据框DF,对于我要使用的索引:
a = (1, 1, 1)
因此,要从数据框架中提取值:
df.loc[a, df.columns[i]]
有效的工作。但是以下内容没有:
df.loc[list(a), df.columns[i]]
给我错误:
*** KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (1), lexsort depth (0)'
为什么这是?
另外,另一个问题,以下性能警告是什么意思?
PerformanceWarning: indexing past lexsort depth may impact performance.
我将使用 df
为
.loc
之间的区别 0 1 2
first second
bar one 4 4 7
two 3 4 7
foo one 8 1 8
two 7 5 4
在这里df.loc[('foo', 'two')]
返回该元组索引的行(7、5、4)。该参数指定多数索引的两个级别。
但是df.loc[['foo', 'two']]
意味着您希望所有具有多数索引最高级别的行为'foo'或"两个"。列表意味着这些是您想要的选项,并且由于每个选项中只提供一个级别,因此选择基于第一个(最左)级别。结果:
0 1 2
first second
foo one 8 1 8
two 7 5 4
(由于没有以"两个"开头的多索引,只有" foo"的那些。)
没有看到您的数据框,我无法分辨出这种差异会导致keyError的何处,但我希望现在的差异本身很清楚。