Многоиндексированные столбцы - Выбрать внутренний - PullRequest
0 голосов
/ 10 сентября 2018

с DataFrame, подобным следующему:

frame = pd.DataFrame(np.arange(12).reshape((4, 3)),
   ....:                      index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
   ....:                      columns=[['Ohio', 'Ohio', 'Colorado'],
   ....:                               ['Green', 'Red', 'Green']])

Какой самый простой способ выбрать все столбцы с зеленым цветом?

frame['Green']

... не работает.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

xs

Этот метод был разработан для этой цели.

frame.xs('Green', axis=1, level=1)
# frame.xs('Green', 1, 1)

     Ohio  Colorado
a 1     0         2
  2     3         5
b 1     6         8
  2     9        11

Или держите уровень

frame.xs('Green', axis=1, level=1, drop_level=False)

     Ohio Colorado
    Green    Green
a 1     0        2
  2     3        5
b 1     6        8
  2     9       11

Это примерно эквивалентно:
Очевидно, сложнее, но интересно посмотреть.

frame.loc[:, frame.columns.get_level_values(1) == 'Green']

Или

frame.loc[:, frame.columns.labels[1] == frame.columns.levels[1].get_loc('Green')]

swaplevel

Мне не нравится этот способ, но он полезен для информативных целей

frame.swaplevel(0, 1, 1).Green

     Ohio  Colorado
a 1     0         2
  2     3         5
b 1     6         8
  2     9        11
0 голосов
/ 10 сентября 2018

Это множественный индекс, вы можете использовать IndexSlice

frame.loc[:,pd.IndexSlice[:,'Green']]
Out[506]: 
     Ohio Colorado
    Green    Green
a 1     0        2
  2     3        5
b 1     6        8
  2     9       11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...