Фильтрация и выбор из сводных таблиц, созданных с помощью python pandas

Я борюсь с иерархическими индексами в пакете Python pandas. В частности, я не понимаю, как фильтровать и сравнивать данные в строках после их поворота.

Вот пример таблицы из документации:

import pandas as pd
import numpy as np

In [1027]: df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
                              'B' : ['A', 'B', 'C'] * 8,
                              'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
                              'D' : np.random.randn(24),
                              'E' : np.random.randn(24)})

In [1029]: pd.pivot_table(df, values='D', rows=['A', 'B'], cols=['C'])
Out[1029]: 
    C             bar       foo
    A     B                    
    one   A -1.154627 -0.243234
          B -1.320253 -0.633158
          C  1.188862  0.377300
    three A -1.327977       NaN
          B       NaN -0.079051
          C -0.832506       NaN
    two   A       NaN -0.128534
          B  0.835120       NaN
          C       NaN  0.838040

Я хотел бы проанализировать следующим образом:

1 )Отфильтруйте эту таблицу по атрибутам столбца, например, выбрав строки с отрицательным значениемfoo:

    C             bar       foo
    A     B                    
    one   A -1.154627 -0.243234
          B -1.320253 -0.633158
    three B       NaN -0.079051
    two   A       NaN -0.128534

2 )Сравнить оставшиеся значения серии Bмежду отдельными группами серий A? Я не знаю, как получить доступ к этой информации:{'one':['A','B'], 'two':['A'], 'three':['B']}и определить, какие значения серии Bуникальны для каждого ключа или видны в нескольких группах ключей и т. д.

Есть ли способ сделать это непосредственно в структуре сводной таблицы, или мне нужно преобразовать это обратно вpandasdataframe?

Обновление:Я думаю, что этот код является шагом в правильном направлении. По крайней мере, это позволяет мне получить доступ к отдельным значениям в этой таблице, но мне все еще трудно -кодировать значения ряда:

table = pivot_table(df, values='D', rows=['A', 'B'], cols=['C'])
table.ix['one', 'A']
7
задан Moberg 1 June 2018 в 09:03
поделиться