Pandas: Verwenden Sie mehrere Spalten in einem dataframe als index eines anderen

Habe ich eine große dataframe mit meinen Daten und einen weiteren dataframe derselben ersten dimension enthält Metadaten zu jedem Punkt in der Zeit (z.B., was trial number war es, was trial-Typ es war).

Was ich will zu tun ist, schneiden Sie die großen dataframe mit den Werten der "metadataframe". Ich will, dass diese separate (eher als das speichern der metadataframe als ein multi-index der größeren).

Gerade jetzt, ich versuche, so etwas zu tun:

def my_func(container):
   container.big_df.set_index(container.meta_df[['col1', 'col2']])
   container.big_df.loc['col1val', 'col2val'].plot()

Jedoch, dies gibt den folgenden Fehler zurück:

ValueError: Must pass DataFrame with boolean values only

Beachten Sie, dass dies funktioniert gut, wenn ich nur einen einzigen Spalte zu set_index.

Kann jemand herausfinden, was läuft hier falsch? Alternativ, kann mir jemand sagen, dass ich das Tue in einem Total dumm und hacky Weise, und dass es einen viel besseren Weg, um darüber zu gehen? 🙂

MEINE LÖSUNG

Vielen Dank für die Ideen. Ich spielte mit der Indizierung ein wenig, und dies ist wohl das einfachste /Schnellste. Ich wusste nicht, wie mit strip-index-Namen, und die Umsetzung der Werte etc. schien umständlich. Ich erkannte, dass etwas interessant (und wahrscheinlich lohnt sich einfach Befestigung):

dfa.set_index(dfb[['col1', 'col2']]) 

nicht funktioniert, aber

dfa.set_index([dfb.col1, dfb.col2])

tut.

So, man kann im Grunde drehen dfb in eine Liste von Spalten, so dass set_index Arbeit, indem Sie die folgende Konvention:

dfa.set_index([dfb[col] for col in ['col1', 'col2']])
InformationsquelleAutor choldgraf | 2014-02-18
Schreibe einen Kommentar