2016-10-18 7 views
1

두 데이터 프레임의 회사 이름간에 일치 (일종의 퍼지 매칭)를 수행하고 있습니다. 그렇게하기 위해 먼저 시작 알파벳이 일치하는 모든 회사 이름간에 전체 병합을 수행합니다. 즉, 'A'로 시작하는 모든 회사는 다른 데이터 프레임에서 'A'로 시작하는 모든 회사와 일치하게됩니다. 다음과 같이 수행됩니다 :팬더에 함수가 포함되어 있습니다

df1['df1_Start'] = df1['company1'].astype(str).str.slice(0,2) 
df2['df2_Start'] = df2['company2'].astype(str).str.slice(0,2) 
Merge = pd.merge(df1,df2, left_on='df1_Start',right_on='df2_Start') 

가 지금은 DF1의 회사가 DF2 회사를 포함 FullMerge에서 모든 행을 갖고 싶어. df1에 속한 회사의 이름이 길기 때문입니다.

Merge1=Merge[Merge['company1'].str.contains(Merge['company2'].str)] 

이것은 나를 위해 작동하지 않습니다. 이 작업을 어떻게 수행합니까? 또한 회사 이름과 일치시키는 데 사용할 수있는 다른 방법을 제안하십시오. 회사는 두 개의 데이터 프레임에서 동일 할 수 있지만 똑같은 방식으로 쓰여지지 않기 때문입니다.

답변

1

난 당신이 |로 구분 된 모든 값을 생성 (또는 regex에서) str.contains에 대한 join| 필요하다고 생각 :

Merge1=Merge[FullMerge['company1'].str.contains("|".join(Merge['company2'].tolist())] 
+0

감사합니다! 어떻게해야 company1이 company2를 처음부터 포함해야하고, 중간에 있지 않아야 하는지를 어떻게 수정할 수 있습니까? 위는 저에게 오 탐율을 꽤 많이주고 있기 때문입니다. – ComplexData

+0

문자열의 정규 표현식 시작이 필요하다고 생각합니다. -Merge1 = Merge [FullMerge [ 'company1'] .str.contains ("|".join (Merge [ '^'+ 'company2']. tolist())]'' – jezrael

관련 문제