Ho un dataframe panda con 3 livelli di un MultiIndex. Sto cercando di estrarre righe di questo dataframe in base a un elenco di valori che corrispondono a due dei livelli.Come dividere un MultiIndex DataFrame con il MultiIndex di un altro
ho qualcosa di simile a questo:
ix = pd.MultiIndex.from_product([[1, 2, 3], ['foo', 'bar'], ['baz', 'can']], names=['a', 'b', 'c'])
data = np.arange(len(ix))
df = pd.DataFrame(data, index=ix, columns=['hi'])
print(df)
hi
a b c
1 foo baz 0
can 1
bar baz 2
can 3
2 foo baz 4
can 5
bar baz 6
can 7
3 foo baz 8
can 9
bar baz 10
can 11
Ora voglio prendere tutte le righe in cui i livelli di indice 'b' e 'c' sono in questo indice:
ix_use = pd.MultiIndex.from_tuples([('foo', 'can'), ('bar', 'baz')], names=['b', 'c'])
cioè valori di hi
avere ('foo', 'can')
o ('bar', 'baz')
nei livelli b
e c
rispettivamente: (1, 2, 5, 6, 9, 10)
.
Quindi mi piacerebbe prendere uno slice(None)
al primo livello e tirare fuori tuple specifiche sul secondo e terzo livello.
Inizialmente pensavo che passare un oggetto multi-indice a .loc avrebbe tirato fuori i valori/i livelli che volevo, ma questo non funziona. Qual è il modo migliore per fare qualcosa di simile?
ho avuto un paio di diversi tentativi di ottenere questo al lavoro. Penso di aver trovato una soluzione decente al fatto che questo al momento sembra essere un po 'difficile. Provalo! – LondonRob