Я борюсь с иерархическими индексами в пакете 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
уникальны для каждого ключа или видны в нескольких группах ключей и т. д.
Есть ли способ сделать это непосредственно в структуре сводной таблицы, или мне нужно преобразовать это обратно вpandas
dataframe
?
Обновление:Я думаю, что этот код является шагом в правильном направлении. По крайней мере, это позволяет мне получить доступ к отдельным значениям в этой таблице, но мне все еще трудно -кодировать значения ряда:
table = pivot_table(df, values='D', rows=['A', 'B'], cols=['C'])
table.ix['one', 'A']