2016-12-02 2 views
0

아래에서 달성 할 수있는 방법을 찾으려고합니다. df1과 df2는 그 차이를 찾기 위해 찾은 두 개의 예제 데이터 프레임입니다. 그것들은 같은 컬럼을 가지지 만 행 데이터는 추가 된 새 이름, 오래된 제거 또는 기존 세트의 데이터를 기반으로 변경 될 수 있습니다.팬더 : 두 데이터 프레임 간 변경

DF1 :

Col1 Col2 Col3 Col4 Col5 
0  1 ABC 94 xxx apple 
1  1 DEF 24 xxx apple 
2  2 ABC 40 yyy banana 
3  3 ABC 74 zzz pear 
4  3 DEF 43 zzz pear 

DF2 :

Col1 Col2 Col3 Col4  Col5 
0  1 ABC 71 xxx  apple 
1  2 PQR 65 yyy  banana 
2  3 ABC 86 zzz  pear 
3  3 DEF 53 zzz  pear 
4  4 PQR 26 mmm pineapple 

출력 :

Col1 Col2 Col3 Col4  Col5 
0  1 ABC -23 xxx  apple 
1  1 DEF -24 xxx  apple 
2  2 ABC -40 yyy  banana 
3  2 PQR 65 yyy  banana 
4  3 ABC 12 zzz  pear 
5  3 DEF 10 zzz  pear 
6  4 PQR 26 mmm pineapple 

내가 this을 시도하고 가지 설명 유래 링크,하지만 난 단지에 대한 변경이 필요했다 특정 열에 만 적용 할 수 있고 새 행에 새 키를 추가 할 수 있습니다 (예 : Col1). gether

감사합니다. 식별자가 열 C1, C2, C4와 C5 인 경우

+0

따라서 결과 : block? –

+0

참으로 .. 이것은 내가 생각하기에 내가 만든 문제의 모든 측면을 다루는 예제이다. – spiff

답변

2

내 이해에 따라 Col3에서 df2-df1을 시도하고 있습니다.

df2.set_index(['Col1', 'Col2', 'Col4', 'Col5']).sub(df1.set_index(['Col1', 'Col2', 'Col4', 'Col5']), fill_value=0).reset_index() 
+0

건배 남자! 너무 간단 해 set_index()를 더 잘 이해해야합니다 .. 감사합니다 – spiff

+0

다행히 도왔습니다 .. –

2

, 당신은 .sub을 인덱스로 설정하고 사용할 수 있습니다

idx = ['Col1', 'Col2', 'Col4', 'Col5'] 

df2.set_index(idx).sub(df1.set_index(idx), fill_value=0) 
Out[16]: 
          Col3 
Col1 Col2 Col4 Col5   
1 ABC xxx apple  -23.0 
    DEF xxx apple  -24.0 
2 ABC yyy banana -40.0 
    PQR yyy banana  65.0 
3 ABC zzz pear  12.0 
    DEF zzz pear  10.0 
4 PQR mmm pineapple 26.0 

당신은 마지막에 reset_index를 호출 할 수 있습니다, 너무 :

df2.set_index(idx).sub(df1.set_index(idx), fill_value=0).reset_index() 
Out[17]: 
    Col1 Col2 Col4  Col5 Col3 
0  1 ABC xxx  apple -23.0 
1  1 DEF xxx  apple -24.0 
2  2 ABC yyy  banana -40.0 
3  2 PQR yyy  banana 65.0 
4  3 ABC zzz  pear 12.0 
5  3 DEF zzz  pear 10.0 
6  4 PQR mmm pineapple 26.0 
+0

감사합니다. VM. .. @aakash_makwana가 한 줄에서 똑같은 일을한다고 생각하니? 따라서 받아 들였습니다 – spiff

+0

물론 한 줄로 가능합니다. 나는 이것이 더 가독하다고 생각했다. 천만에요. :) – ayhan

+0

당신은 정말로 옳습니다, 이것은 더 읽을 수 있습니다 – spiff