예를 들어 모든 열이 복제되지 않은 경우 복제 된 데이터 손실을 포함하지 않는이 동작을 방지하기 위해 사용할 수있는 전략도 있습니다. 당신이 가지고 있다면
In [1]: df = pd.DataFrame([[1, 3], [2, 4]], columns=['A', 'B'])
In [2]: df2 = pd.DataFrame([[1, 5], [1, 6]], columns=['A', 'C'])
한 가지 방법은 중복의 평균을 취하는 것입니다 (합계 등을 취할 수도 있음).
In [3]: df3 = df2.groupby('A').mean().reset_index()
In [4]: df3
Out[4]:
C
A
1 5.5
In [5]: merged = pd.merge(df,df3,on=['A'], how='outer')
In [6]: merged
Out[204]:
A B C
0 1 3 5.5
1 2 4 NaN
또는 pd.to_numeric ()을 사용하여 변환 할 수없는 숫자가 아닌 데이터가 있거나 단순히 평균을 취하지 않으려는 경우 중복을 열거하여 병합 변수를 변경할 수 있습니다. 그러나이 전략은 중복이 두 데이터 세트에 모두 존재하는 경우에 적용됩니다 (동일한 문제 동작을 유발하고 공통 문제이기도 함).
In [7]: df = pd.DataFrame([['a', 3], ['b', 4],['b',0]], columns=['A', 'B'])
In [8]: df2 = pd.DataFrame([['a', 3], ['b', 8],['b',5]], columns=['A', 'C'])
In [9]: df['count'] = df.groupby('A')['B'].cumcount()
In [10]: df['A'] = np.where(df['count']>0,df['A']+df['count'].astype(str),df['A'].astype(str))
In[11]: df
Out[11]:
A B count
0 a 3 0
1 b 4 0
2 b1 0 1
df2에 대해 동일한 작업을 수행하고 df 및 df2에 개수 변수를 삭제하고 'A'에 병합합니다.
In [16]: merged
Out[16]:
A B C
0 a 3 3
1 b 4 8
2 b1 0 5
몇 가지 메모. 이 마지막 경우에는 .duplicated 대신 .cumcount ()를 사용합니다. 주어진 관찰에 대해 둘 이상의 중복이있는 경우 일 수 있기 때문입니다. 또한 np.where () 명령을 사용하기 때문에 .astype (str)을 사용하여 개수 값을 문자열로 변환하지만 pd.concat () 또는 다른 것을 사용하면 다른 응용 프로그램을 허용 할 수 있습니다.
마지막으로 하나의 데이터 세트에만 중복이 있지만 계속 유지하려는 경우 후자 전략의 전반부를 사용하여 결과 병합에서 중복을 구별 할 수 있습니다.