Wie man sich mit einem mehrdimensionalen index in pandas

In Pandas, was ist ein guter Weg, um wählen Sie Sätze von beliebigen Zeilen in ein multiindex?

df = pd.DataFrame(columns=['A', 'B', 'C'])
df['A'] = ['a', 'a', 'b', 'b']
df['B'] = [1,2,3,4]
df['C'] = [1,2,3,4]

the_indices_we_want = df.ix[[0,3],['A','B']]
df = df.set_index(['A', 'B']) #Create a multiindex

df.ix[the_indices_we_want] #ValueError: Cannot index with multidimensional key

df.ix[[tuple(x) for x in the_indices_we_want.values]]

Diese Letzte Zeile ist eine Antwort, aber es fühlt sich klobig Antwort; Sie kann nicht einmal Listen, Tupeln. Es beinhaltet auch die Erzeugung eines neuen Objekts zu tun, die Indizierung mit. Ich bin in einer situation, wo ich versuche zu tun, eine Suche auf ein multiindex dataframe, mit Indizes von einem anderen dataframe:

data_we_want = dataframe_with_the_data.ix[dataframe_with_the_indices[['Index1','Index2']]]

Recht, jetzt sieht es aus wie ich brauche, es zu schreiben, wie diese:

data_we_want = dataframe_with_the_data.ix[[tuple(x) for x in dataframe_with_the_indices[['Index1','Index2']].values]]

Dass ist praktikabel, aber wenn es viele Zeilen gibt (d.h. Hunderte von Millionen von gewünschten Indizes), dann generieren diese Liste von Tupeln wird ganz die Belastung. Alle Lösungen?


Edit: Die Lösung von @joris funktioniert, aber nicht, wenn die Indizes sind alle zahlen. Beispiel, wo die Indizes sind alle ganzen zahlen:

df = pd.DataFrame(columns=['A', 'B', 'C'])
df['A'] = ['a', 'a', 'b', 'b']
df['B'] = [1,2,3,4]
df['C'] = [1,2,3,4]

the_indices_we_want = df.ix[[0,3],['B','C']]
df = df.set_index(['B', 'C'])

df.ix[pd.Index(the_indices_we_want)] #ValueError: Cannot index with multidimensional key

df.ix[pd.Index(the_indices_we_want.astype('object'))] #Works, though feels clunky.

InformationsquelleAutor jeffalstott | 2015-03-10

Schreibe einen Kommentar