2017-04-14 4 views
2

ich eine grundlegende Datenrahmen haben, wie folgt strukturiert:Gruppe Reihen in Pandas Datenrahmen basierend auf komplexen Zustand

   Col1 
Ind1 Ind2 
0 key1 12 
    key2 35 
1 key3 56 
    key4 24 
    key5 65 

... und eine andere wie folgt aus:

ColA 
0 key1 
1 else 
2 else 
3 key3 

Was ich brauche ist die Mittelwert von df1, gruppiert basierend darauf, ob Ind2 in df2 ist oder nicht. Das habe ich ohne Erfolg versucht; Die Botschaft lautet "Längen müssen übereinstimmen" - aber natürlich nicht.

df1 = pd.DataFrame({'ind1': [0, 0, 1, 1, 1], 'ind2': ['key1', 'key2', 'key3', 'key4', 'key5'], 'col1': [12, 35, 56, 24, 65]},) 
df1.set_index(['ind1', 'ind2'], inplace=True) 
df2 = pd.DataFrame({'ColA': ['key1', 'else', 'else', 'key3']}) 

print (df1.groupby(df1.index.levels[1] in df2.get_values()).mean()) 

Vielen Dank im Voraus für einen Hinweis!

Antwort

1

Sie möchten tatsächlich überprüfen, ob ein Element df1.index.levels[1] in df2.ColA ist (da Sie für jede Zeile einen Wert benötigen). Die Syntax, die du geschrieben hast, wird dir das nicht bringen. Stattdessen sollten Sie versuchen

df1.groupby(df1.index.levels[1].isin(df2.ColA)).mean() 

Notiere die isin Funktion, die True/False für jedes Element zurückgibt, und die Tatsache, dass ich direkt auf df2.ColA beziehen, da es die Spalte, die die Werte enthält (reffering zu df2 stattdessen würde Suche nach den Werten in den Spaltennamen df2).

+0

Genau das, was ich brauchte, vielen Dank! – user7411619

Verwandte Themen