2016-08-11 2 views
3

입니다.이 두 데이터 프레임의 보완을 얻을 수 있도록 간결하고 효율적인 코드 (for loop을 직접 사용하지 마십시오)가 있습니까?두 개의 큰 데이터 프레임이 주어진 두 데이터 프레임의 보완 방법은

나에게 가장 정직 방법은 아래의 순진 예와 같이 union-intersection을 계산하는 것입니다,하지만 난 어떤을위한 pandas 또는 np

df1= pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 
        'key2': ['K0', 'K1', 'K0', 'K1'], 
        'A': ['A0', 'A1', 'A2', 'A3'], 
        'B': ['B0', 'B1', 'B2', 'B3']})  
df2= pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 
         'key2': ['K0', 'K0', 'K0', 'K0'], 
         'C': ['C0', 'C1', 'C2', 'C3'], 
         'D': ['D0', 'D1', 'D2', 'D3']})   
intersection= pd.merge(df1, df2, how='inner',on=['key1', 'key2']) 
union=pd.merge(df1, df2, how='outer',on=['key1', 'key2'])  


complement=union-intersection 

감사의 우아한 언어로이를 구현하는 방법을 모른다 의견과 답변

+0

(HTTP [파이썬 팬더의 지표의 보완에 따라 요소를 따기]의 가능한 중복 : // 유래를 .com/questions/14986510/python-pandas의 인덱스 보완 요소 기반 픽업 – Mathias711

+0

@ Mathias711, 감사합니다. 그들의 해결책을 적용하기 위해, 나는'노조 '에서'교차점 '의 지표를 찾아야한다. 그때 나는 이전에 얻은 색인 – user6651227

답변

4

이 시작 :

df1= pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 
        'key2': ['K0', 'K1', 'K0', 'K1'], 
        'A': ['A0', 'A1', 'A2', 'A3'], 
        'B': ['B0', 'B1', 'B2', 'B3']})  
df2= pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 
         'key2': ['K0', 'K0', 'K0', 'K0'], 
         'C': ['C0', 'C1', 'C2', 'C3'], 
         'D': ['D0', 'D1', 'D2', 'D3']})   
intersection = pd.merge(df1, df2, how='inner',on=['key1', 'key2']) 
union   = pd.merge(df1, df2, how='outer',on=['key1', 'key2'])  

인쇄 조합

 A B key1 key2 C D 
0 A0 B0 K0 K0 C0 D0 
1 A1 B1 K0 K1 NaN NaN 
2 A2 B2 K1 K0 C1 D1 
3 A2 B2 K1 K0 C2 D2 
4 A3 B3 K2 K1 NaN NaN 
5 NaN NaN K2 K0 C3 D3 

인쇄 교차로

A B key1 key2 C D 
0 A0 B0 K0 K0 C0 D0 
1 A2 B2 K1 K0 C1 D1 
2 A2 B2 K1 K0 C2 D2 

노조 교차점이 시도 :

union[union.isnull().any(axis=1)] 

    A B key1 key2 C D 
1 A1 B1 K0 K1 NaN NaN 
4 A3 B3 K2 K1 NaN NaN 
5 NaN NaN K2 K0 C3 D3 
+0

을 많이 제외하고 그들의 방법을 적용 할 수 있습니다, 그리고 나는 충분한 명성을 얻지 못했지만 당신은 업 그레 이드 – user6651227

+0

나는 당신을 엄지 손가락으로 눌렀습니다! – user6651227

+0

감사합니다. 프로젝트에 행운이 있기를 바랍니다. – Merlin

관련 문제