У меня есть DataFrame с столбцами MultiIndex, которые выглядят следующим образом:
# sample data
col = pd.MultiIndex.from_arrays([['one', 'one', 'one', 'two', 'two', 'two'],
['a', 'b', 'c', 'a', 'b', 'c']])
data = pd.DataFrame(np.random.randn(4, 6), columns=col)
data
Каков правильный и простой способ выбора только определенных столбцов (например, ['a', 'c']
, а не диапазона) со второго уровня?
В настоящее время я делаю это так:
import itertools
tuples = [i for i in itertools.product(['one', 'two'], ['a', 'c'])]
new_index = pd.MultiIndex.from_tuples(tuples)
print(new_index)
data.reindex_axis(new_index, axis=1)
Не похоже, что это хорошее решение, потому что мне нужно выкинуть itertools
, создать другой MultiIndex вручную, а затем повторно проиндексировать (и мой фактический код еще более грязный, поскольку списки столбцов не так просто для извлечения). Я уверен, что это должно быть несколько ix
или xs
способ сделать это, но все, что я пытался, привело к ошибкам.