выбор из мультииндексных панд

У меня есть многоиндексный кадр данных с столбцами «A» и «B».

Есть ли способ выбирать строки, фильтруя один столбец мультииндекса без переустановки индекса к индексу одного столбца.

  • Применение нескольких функций к нескольким столбцам группы
  • Странные манипуляции с данными в Pandas
  • Как добавить один элемент в Pandas Series
  • фильтрация кадров данных pandas по датам
  • Добавление метаинформации / метаданных в pandas DataFrame
  • Pandas csv-import: сохранить ведущие нули в столбце
  • Например.

    # has multi-index (A,B) df #can i do this? I know this doesnt work because index is multi-index so I need to specify a tuple df.ix[df.A ==1] 

  • Python: json.loads возвращает элементы с префиксом 'u'
  • Как поставлять входные данные stdin, files и environment в модульные тесты Python?
  • Заменить первое вхождение строки
  • Django - использование нескольких внешних ключей для одной и той же модели
  • Связи SVN для Python для Windows
  • Есть ли возможность выполнить скрипт Python во время интерактивного режима
  • 2 Solutions collect form web for “выбор из мультииндексных панд”

    Один из способов – использовать метод get_level_values Index:

     In [11]: df Out[11]: 0 AB 1 4 1 2 5 2 3 6 3 In [12]: df.iloc[df.index.get_level_values('A') == 1] Out[12]: 0 AB 1 4 1 

    В 0.13 вы сможете использовать xs с аргументом drop_level :

     df.xs(1, level='A', drop_level=False) # axis=1 if columns 

    Примечание: если это был столбец MultiIndex, а не индекс, вы можете использовать тот же метод:

     In [21]: df1 = df.T In [22]: df1.iloc[:, df1.columns.get_level_values('A') == 1] Out[22]: A 1 B 4 0 1 

    Вы можете использовать DataFrame.xs() :

     In [36]: df = DataFrame(np.random.randn(10, 4)) In [37]: df.columns = [np.random.choice(['a', 'b'], size=4).tolist(), np.random.choice(['c', 'd'], size=4)] In [38]: df.columns.names = ['A', 'B'] In [39]: df Out[39]: A ba B dddd 0 -1.406 0.548 -0.635 0.576 1 -0.212 -0.583 1.012 -1.377 2 0.951 -0.349 -0.477 -1.230 3 0.451 -0.168 0.949 0.545 4 -0.362 -0.855 1.676 -2.881 5 1.283 1.027 0.085 -1.282 6 0.583 -1.406 0.327 -0.146 7 -0.518 -0.480 0.139 0.851 8 -0.030 -0.630 -1.534 0.534 9 0.246 -1.558 -1.885 -1.543 In [40]: df.xs('a', level='A', axis=1) Out[40]: B dd 0 -0.635 0.576 1 1.012 -1.377 2 -0.477 -1.230 3 0.949 0.545 4 1.676 -2.881 5 0.085 -1.282 6 0.327 -0.146 7 0.139 0.851 8 -1.534 0.534 9 -1.885 -1.543 

    Если вы хотите сохранить уровень A ( drop_level аргумент drop_level доступен только в выпуске v0.13.0):

     In [42]: df.xs('a', level='A', axis=1, drop_level=False) Out[42]: A a B dd 0 -0.635 0.576 1 1.012 -1.377 2 -0.477 -1.230 3 0.949 0.545 4 1.676 -2.881 5 0.085 -1.282 6 0.327 -0.146 7 0.139 0.851 8 -1.534 0.534 9 -1.885 -1.543 
    Python - лучший язык программирования в мире.