Подтвердить что ты не робот

Использование .loc с MultiIndex в pandas?

Кто-нибудь знает, можно ли использовать метод DataFrame.loc для выбора из MultiIndex? У меня есть следующий DataFrame и вы хотите иметь доступ к значениям, расположенным в столбцах "Dwell", по индексам ('at', 1), ('at', 3), ('at', 5) и т.д. (Не последовательным).

Мне бы хотелось сделать что-то вроде data.loc[['at',[1,3,5]], 'Dwell'], похожее на синтаксис data.loc[[1,3,5], 'Dwell'] для регулярного индекса (который возвращает трехзначную серию значений Dwell).

Моя цель - выбрать произвольное подмножество данных, выполнить некоторый анализ только на этом подмножестве, а затем обновить новые значения с результатами анализа. Я планирую использовать тот же синтаксис для установки новых значений для этих данных, поэтому селектор цепочки не будет работать в этом случае.

Вот фрагмент DataFrame, с которым я работаю:

         Char    Dwell  Flight  ND_Offset  Offset
QGram                                                           
at    0     a      100     120   0.000000       0  
      1     t      180       0   0.108363       5  
      2     a      100     120   0.000000       0 
      3     t      180       0   0.108363       5 
      4     a       20     180   0.000000       0  
      5     t       80     120   0.108363       5
      6     a       20     180   0.000000       0   
      7     t       80     120   0.108363       5  
      8     a       20     180   0.000000       0  
      9     t       80     120   0.108363       5   
      10    a      120     180   0.000000       0  

Спасибо!

4b9b3361

Ответ 1

Если вы находитесь в версии 0.14, вы можете просто передать кортеж в .loc, как показано ниже:

df.loc[('at', [1,3,4]), 'Dwell']

Ответ 2

Попробуйте cross-section индексирование:

In [68]: df.xs('at', level='QGram', drop_level=False).loc[[1,4]]
Out[68]: 
        Char  Dwell  Flight  ND_Offset  Offset
QGram                                         
at    1    t    180       0   0.108363       5
      4    a     20     180   0.000000       0