2017-04-14 20 views
2

복잡한 조건에 따라 팬더 DataFrame 행 :그룹의이 같은 구조 나 기본 dataframe이

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

...이 같은 다른 하나 내가 필요로 무엇

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.ColA를 직접 참조한다는 사실은 (df2에 참고로하는 것에 시도해야 열 이름 df2의 값을 검색하십시오.

+0

정확히 내가 필요한 것, 감사합니다. – user7411619