У меня есть следующий DataFrame, который использует трехуровневый MultiIndex:
In [1]: iterables = [[1, 2], ['foo', 'bar'], ['one', 'two']]
...: midx = pd.MultiIndex.from_product(iterables)
...: df = pd.DataFrame(np.random.randn(8), index=midx)
...: df
Out[1]:
0
1 foo one -0.217594
two -1.361612
bar one 2.477790
two 0.874409
2 foo one 0.403577
two 0.076111
bar one 1.423512
two 0.047898
Я бы хотел разделить индекс так, чтобы я сохранил все на первом уровне, сохраняя только следующие комбинациивторые два уровня: ('foo', 'one')
и ('bar', 'two')
.То есть я хотел бы, чтобы мой вывод выглядел примерно так:
0
1 foo one -0.217594
bar two 0.874409
2 foo one 0.403577
bar two 0.047898
Возможно ли сделать это в одну строку, используя атрибут, такой как .loc
, дляпример?
Я знаю, что я могу взять поперечные сечения желаемых комбинаций отдельно, используя функцию .xs
, но я бы предпочел более короткий, более похожий на срезсинтаксис.В частности, наличие однострочника важно для моего варианта использования.
Кажется, что должно работать следующее:
df.loc[[(slice(None), 'foo', 'one'), (slice(None), 'bar', 'two')]]
Но это приводит к TypeError: unhashable type: 'slice'
.