У меня есть DataFrame с колоннами мультииндексными, который выглядит следующим образом:Как выбрать только определенные столбцы из 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
, построить еще один мультииндексных вручную и затем reindex (и мой фактический код еще более беспорядочен, так как списки столбцов не так просто получить). Я уверен, что должен быть какой-то ix
или xs
способ сделать это, но все, что я пробовал, вызвало ошибки.
Вы пробовали использовать словари? – darmat
Нет, не знаю. Вы хотите быстрее построить MultiIndex? Если это так, это не главное - я бы хотел его избежать и проиндексировать непосредственно с чем-то вроде data.xs (['a', 'c'], axis = 1, level = 1) ' – metakermit
предположим следующее: – darmat