2014-09-26 2 views
1

접두사를 기반으로 함께 일치하는 여러 DF를 병합합니다. 의미 상으로 정확한 문자열을 생성하는 데는 90 %의 시간이 걸리지 만 때로는 이러한 방식으로 병합하면 함께 루프하는 구문을 만들 수 있습니다. 여기에 더 나은 무슨 뜻인지 설명 할 것이다처럼 내 DF는 모습의 예입니다 : 열이 내DF에서 중복 단어가 포함 된 문구 제거 (Pandas, Python3)

Words   Words1    Words2 
Big Hitter  Up and Down   A Cold Lonely Night 
Snail Mail  Wood Grain Rail  Cup of Lemon Tea 
....    .....    ..... 
French Fries  Bat Boy Bat   Small Ball Small Ball 
Phone Book  Fee No Fee   Hands up Hands up 

하단 두 가지 예를 3 나는 그들이 "함께 루프"를 말할 때 내 말은 무엇을 - IE의 문자열에 같은 단어의 중복이 들어 있습니다.

나는

re.sub(r'\b(.+)(\s+\1\b)+', r'\1', s) 

사용하여 이러한 문구를 중복 제거하는 방법을 알고하지만 난 그들이 완전히 사라해야합니다. 누구든지 내 DF의 각 열에서 중복 된 단어가 포함 된 문자열을 제거하는 방법을 알고 있습니까?

그래서 나는

Words   Words1    Words2 
Big Hitter  Up and Down   A Cold Lonely Night 
Snail Mail  Wood Grain Rail  Cup of Lemon Tea 
....    .....    ..... 
French Fries  
Phone Book  

답변

1

흥미있는 문제처럼 DF 기대했다. 어떻게 다음에 대해 : 단계에

브레이크 다운 생각을 보여 더 나은 :

In [39]: 

print df 
      Words   Words1     Words2 
0 Big Hitter  Up and Down A Cold Lonely Night 
1 Snail Mail Wood Grain Rail  Cup of Lemon Tea 
2 French Fries  Bat Boy Bat Small Ball Small Ball 
3 Phone Book  Fee No Fee  Hands up Hands up 
In [40]: 

print df.applymap(lambda x: len(' '.join(set(x.split())))==len(x)) 
    Words Words1 Words2 
0 True True True 
1 True True True 
2 True False False 
3 True False False 
In [41]: 

print df.where(df.applymap(lambda x: len(' '.join(set(x.split())))==len(x)), 
       '') 
      Words   Words1    Words2 
0 Big Hitter  Up and Down A Cold Lonely Night 
1 Snail Mail Wood Grain Rail  Cup of Lemon Tea 
2 French Fries          
3 Phone Book 

우리는 그 다음, list에 dataframe의 각 단어를 깰 set로 변환하는 lambda 기능을 사용을 , 동일한 단어의 여러 인스턴스를 제거합니다. 그런 다음 단어가 더 짧아지는 지 묻습니다. 그렇다면 반복되는 단어가 있어야합니다. 이것이 바로 lambda의 기능입니다. 이 단계에서 boolean 데이터 프레임을 만듭니다.

df.where 부분은 간단합니다. 우리가 방금 작성한 boolean 데이터 프레임을보고, 셀이 true이면 결과 데이터 프레임은 df에서 해당 값을 가져옵니다. 그렇지 않으면 셀이 두 번째 인수에 지정된 값을 가져옵니다. 여기서 우리는 ''을 사용합니다. 이는 boolean 데이터 프레임에있는 false 인 모든 셀을 비 웁니다.

+0

안녕하세요 CT -이 오류가 계속 발생합니다 : AttributeError : (" 'float'객체에 'split'"속성이 없으며 색인 단어에서 발생했습니다.) 어떤 아이디어입니까? – user3682157

+0

모든 열이'string'입니까? –

+0

그걸 알아 냈고 해결책이 효과가 있습니다 - 어떻게 작동하는지에 대해 좀 더 자세히 설명해 주시겠습니까? 고맙습니다! – user3682157

관련 문제