반응형

10-10. 비교 (compare)

DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False)

 

개요


compare 메서드는 두 객체의 요소의 차이를 반환합니다.

 

사용법


기본 사용법
self.compare(other, align_axis=1, keep_shape=False, keep_equal=False)
other : 원본과 비교할 데이터입니다. align_axis : {0 : index / 1 : columns} self와 other를 정렬할 축입니다.
keep_shape : 원본의 모양을 유지할지 여부입니다. False인 경우 차이가 있는 행만 출력합니다.
keep_equal : 값이 같은경우 값을 출력할지 여부입니다. 기본값은 False로 NaN을 출력합니다.

반응형

 

예시


먼저 일부 값이 다른 4x3짜리 데이터프레임 두개를 생성하겠습니다.

idx = ['row1','row2','row3','row4']
col = ['col1','col2','col3']
data1 = [['A',1,11],['B',2,12],['C',3,13],['D',4,14]]
data2 = [['X',1,11],['B','Y',12],['C',3,13],['D',4,'Z']]
df1 = pd.DataFrame(data1, idx, col)
print(df1)
>>
     col1  col2  col3
row1    A     1    11
row2    B     2    12
row3    C     3    13
row4    D     4    14
df2 = pd.DataFrame(data2, idx, col)
print(df2)
>>
     col1 col2 col3
row1    X    1   11
row2    B    Y   12
row3    C    3   13
row4    D    4    Z

기본적인 사용법
compare메서드를 이용해서 단순히 df1과 df2를 비교할 경우 아래와 같이 self와 other이 multi columns로 추가되며 차이가 있는 행만 출력하고, 동일한 값은 NaN을 출력하게 됩니다.

print(df1.compare(df2))
>>
     col1       col2        col3      
     self other self other  self other
row1    A     X  NaN   NaN   NaN   NaN
row2  NaN   NaN  2.0     Y   NaN   NaN
row4  NaN   NaN  NaN   NaN  14.0     Z


align_axis인수의 사용
align_axis인수를 사용하여 self와 other 카테고리가 multi index로 반환될지 multi columns로 반환될지 지정할 수 있습니다.
align_axis=0일 경우 multi index로 출력됩니다.

print(df1.compare(other=df2, align_axis=0))
>>
           col1 col2  col3
row1 self     A  NaN   NaN
     other    X  NaN   NaN
row2 self   NaN  2.0   NaN
     other  NaN    Y   NaN
row4 self   NaN  NaN  14.0
     other  NaN  NaN     Z

align_axis=1일 경우 multi columns으로 출력됩니다.(기본값)

print(df1.compare(other=df2, align_axis=1))
>>
     col1       col2        col3      
     self other self other  self other
row1    A     X  NaN   NaN   NaN   NaN
row2  NaN   NaN  2.0     Y   NaN   NaN
row4  NaN   NaN  NaN   NaN  14.0     Z


keep_shape인수의 사용
keep_shape=True로 사용할 경우 기존 열을 모두 출력하게되고, keep_shape=False일 경우(기본값) 차이가 있는 열만 출력하게 됩니다.

print(df1.compare(other=df2, keep_shape=True))
>>
     col1       col2        col3      
     self other self other  self other
row1    A     X  NaN   NaN   NaN   NaN
row2  NaN   NaN  2.0     Y   NaN   NaN
row3  NaN   NaN  NaN   NaN   NaN   NaN
row4  NaN   NaN  NaN   NaN  14.0     Z
print(df1.compare(other=df2, keep_shape=False))
>>
     col1       col2        col3      
     self other self other  self other
row1    A     X  NaN   NaN   NaN   NaN
row2  NaN   NaN  2.0     Y   NaN   NaN
row4  NaN   NaN  NaN   NaN  14.0     Z


keep_equal인수의 사용
keep_equal인수를 사용할 경우 같은값을 출력할지 아니면 NaN으로 출력할지 지정할 수 있습니다.
keep_eaual=True인 경우 같은값도 출력합니다.

print(df1.compare(other=df2, keep_equal=True))
>>
     col1       col2       col3      
     self other self other self other
row1    A     X    1     1   11    11
row2    B     B    2     Y   12    12
row4    D     D    4     4   14     Z

keep_eaual=False인 경우 같은값은 NaN을 출력합니다.(기본값)

print(df1.compare(other=df2, keep_equal=False))
>>
     col1       col2        col3      
     self other self other  self other
row1    A     X  NaN   NaN   NaN   NaN
row2  NaN   NaN  2.0     Y   NaN   NaN
row4  NaN   NaN  NaN   NaN  14.0     Z
반응형

+ 최근 글