2017-04-14 4 views
2

複雑な条件に基づいて、パンダDATAFRAMEの行、:グループのこのような構造私は基本的なデータフレームを持って

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

...と、このような別の1:私は必要なもの

ColA 
0 key1 
1 else 
2 else 
3 key3 

がありますInd2がdf2にあるかどうかに基づいてグループ化されたdf1の平均値。 これは私が成功せずに試みたものです。メッセージsaisは "長さは比較するためにマッチする必要があります" - もちろん、彼らはしません。

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()) 

ありがとうございました!

答えて

1

df1.index.levels[1]の要素がdf2.ColAにあるかどうかを実際に確認するには、各行に値が必要です。あなたが書いた構文はそれをあなたに与えません。代わりに、あなたは

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

注すべての要素のためにTrue/Falseを返すisin機能、およびそれが(代わりにdf2に値を含む列ですrefferingされているので、私は、df2.ColAを直接参照するという事実を試してみてください列名df2の値を検索します)。

+0

私が必要としていたもの、おかげさまで! – user7411619

関連する問題