2017-01-04 1 views
4

다음은 내가 작업하고있는 샘플 데이터입니다.파이썬에서 특정 조건과 일치하는 복제본 찾기

sender receiver date id 
salman akhtar 20161201 1111 
akhtar salman 20161201 1112 
nabeel ahmed 20161201 1113 
salman akhtar 20161201 1114 
salman akhtar 20161202 1115 
nabeel ahmed 20161202 1116 
ahmed nabeel 20161202 1117 
nabeel ahmed 20161202 1118 
nabeel ahmed 20161202 1119 

내가 얻으려고하는 것은 같은 날짜에 동일한 발신자와 동일한 수신자를 기준으로 중복 항목을 찾는 것입니다.

이 경우 다음 코드를 작성했습니다.

import pandas as pd 
import xlsxwriter 

print 'Script for Finding duplicate entries\n' 

path = raw_input('Enter file name: ') 
print 'Loading file. Please wait...' 

xlsx = pd.ExcelFile(path+'.xlsx') 

print 'File loaded successfully.\n' 
sheet = raw_input('Enter Sheet Name: ') 
df = pd.read_excel(xlsx, sheet) 

df['is_duplicated'] = df.duplicated(['sender', 'receiver','date'],keep=False) 

df_dup = df.loc[df['is_duplicated'] == True] 

print 'Found Below Duplicates' 
print df_dup 

writer = pd.ExcelWriter("pandas_column_formats.xlsx", engine='xlsxwriter') 
df_dup.to_excel(writer, sheet_name='Sheet1') 

writer.save() 

print 'File created successfully.' 

지금, 나는 현재 코드는 정확한 중복을 반환하고 내가 상기 조건에 따라 모든 가능한 중복 행을 원하기 때문에뿐만 아니라 fuzzywuzzy을 통합합니다.

아무도 도와 줄 수 있습니까?

답변

0

이와 비슷한?

>>> fuzz_ratio = 50 
>>> df_rem = df[~df.duplicated(['sender', 'receiver','date'],keep=False)] 
>>> df_possible_dup = pd.merge(df_rem, df, on='date', suffixes=['', '_j']) 
>>> df_possible_dup.apply(lambda x: fuzz.ratio(x['sender'], x['sender_j']) >= 50 and x['id'] != x['id_j'], axis=1) 

정확한 요구 사항을 모르겠지만 발신자 또는 수신자가 정확히 일치하고 다른 부분이 일치 할 수 있는지 확인하고 싶을 것입니다. 그런 다음 사용자 정의 함수를 사용할 수 있습니다.

관련 문제