148 votes

sélection à partir de pandas multi-index

J'ai un cadre de données multi-index avec des colonnes 'A' et 'B'.

Existe-t-il un moyen de sélectionner des lignes en filtrant sur une colonne de l'index multiple sans réinitialiser l'index à une seule colonne ?

Par exemple.

# has multi-index (A,B)
df
#can I do this? I know this doesn't work because the index is multi-index so I need to     specify a tuple

df.ix[df.A ==1]

9voto

Mykola Zotko Points 1929

Vous pouvez utiliser MultiIndex le découpage en tranches. Par exemple :

arrays = [["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],
          ["one", "two", "one", "two", "one", "two", "one", "two"]]   
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=["A", "B"])
df = pd.DataFrame(np.random.randint(9, size=(8, 2)), index=index, columns=["col1", "col2"])

         col1  col2
A   B              
bar one     0     8
    two     4     8
baz one     6     0
    two     7     3
foo one     6     8
    two     2     6
qux one     7     0
    two     6     4

Pour tout sélectionner dans A y two de B :

df.loc[(slice(None), 'two'), :]

Sortie :

         col1  col2
A   B              
bar two     4     8
baz two     7     3
foo two     2     6
qux two     6     4

Pour sélectionner bar y baz de A y two de B :

df.loc[(['bar', 'baz'], 'two'), :]

Sortie :

         col1  col2
A   B              
bar two     4     8
baz two     7     3

6voto

Gonzalo Goral Points 41

Une autre option est :

filter1 = df.index.get_level_values('A') == 1
filter2 = df.index.get_level_values('B') == 4

df.iloc[filter1 & filter2]
Out[11]:
     0
A B
1 4  1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X