2016-07-07 3 views
7

두 데이터 프레임에서 같은 이름의 열의 차이점을 어떻게 골라 낼 수 있습니까? 나는 X라는 열과 X라는 열이있는 데이터 프레임 B가있는 데이터 프레임 A를 가지고있다. A이면 B와 A의 공통 X 값을 얻지 만 어떻게 비 공통적 인 값을 얻을 수 있을까? ? 당신이 how='outer'indicator=True에 병합 유형을 변경하는 경우팬더 (Python)의 "병합 방지"

+1

A만의 고유 한 값을 보려면 isin (B [ 'X'])'를 쓰고 반대의 경우는 반대로 – EdChum

+0

또한'pd.merge '_X', indicator = True, how = 'outer')'이 작동하면'_merge' col이 추가되고 left_only, right_only라는 값을 갖게됩니다 (예 : A, B, on = [ 'X' 왼쪽/오른쪽 만 – EdChum

답변

14

이 모두/우 단지/값이 남아 있는지 여부를 알려줄 수있는 열을 추가합니다 :

In [2]: 
A = pd.DataFrame({'x':np.arange(5)}) 
B = pd.DataFrame({'x':np.arange(3,8)}) 
print(A) 
print(B) 
    x 
0 0 
1 1 
2 2 
3 3 
4 4 
    x 
0 3 
1 4 
2 5 
3 6 
4 7 

In [3]: 
pd.merge(A,B, how='outer', indicator=True) 

Out[3]: 
    x  _merge 
0 0.0 left_only 
1 1.0 left_only 
2 2.0 left_only 
3 3.0  both 
4 4.0  both 
5 5.0 right_only 
6 6.0 right_only 
7 7.0 right_only 

그런 결과가에 DF 병합 필터링 할 수 있습니다 _merge COL :

In [4]: 
merged = pd.merge(A,B, how='outer', indicator=True) 
merged[merged['_merge'] == 'left_only'] 

Out[4]: 
    x  _merge 
0 0.0 left_only 
1 1.0 left_only 
2 2.0 left_only 
또한 B의 값을하지 찾기 위해 마스크를 isin를 사용하여 부정 할 수

:

In [5]: 
A[~A['x'].isin(B['x'])] 

Out[5]: 
    x 
0 0 
1 1 
2 2