2014-09-11 2 views
-1

у меня есть один список dataframe, как это называется Single_Words:Соединить слова и фразы, основанные на условиях (Python 3, Панды)

Words   
The    
Man   
Was    
Funny   
and    
Handsome   

А потом еще один отдельный список dataframe, как это потребовало биграмм:

Words    
The Comedian   
The Man    
Handsome Dan   
Funny Guy    
Man Down    
The Jokester   
Comedians Are  

Что я хочу сделать, это пройти через каждое слово в единичном кадре Single_Words, а затем объединить его в биграмм во втором списке, где первое слово только для биграма такое же.

Так вот пример вывод, используя слово «The» от первого dataframe и перебор второго dataframe даст новый список, как это:

Words      
The The Comedian   
The The Man    
The The Jokester   

И с помощью «Man» От первого кадра данных и итерация через секунду даст:

Words 
Man Down 

После того, как у меня есть этот новый список и итерация первоначального списка, я планирую промыть и повторить этот процесс снова прохожу через исходную таблицу биграмм (до 5 раз). Так возвращаясь к «The» Например, вторая итерация бы добавить в список, как этот

 Words  
The The Comedian   
The The Man    
The The Jokester      
The The Man Man Down 
The The Comedians Comedians Are 

Кто-нибудь есть какие-либо предложения?

ответ

1

Это работает, я постараюсь найти лучший способ. В основном я использую re для поиска полных слов (так что и не соответствует Красивый, например) и построить Dict и создать новый ФР от этого Dict:

In [108]: 

import re 
temp = {'Words':[]} 
def func(x): 
    for w in list(df1.Words): 
     if re.search(r'\b'+x+r'\b', w): 
      # just add the entry if the dict is empty 
      if len(temp['Words']) == 0: 
       temp['Words'] = [x + ' ' + w] 
      else: 
       t = temp['Words'] 
       t.append(x + ' ' + w) 
       temp['Words'] = t 

df.Words.apply(func) 
total = pd.DataFrame(temp) 
total 
Out[108]: 
        Words 
0  The The Comedian 
1   The The Man 
2  The The Jokester 
3   Man The Man 
4   Man Man Down 
5  Funny Funny Guy 
6 Handsome Handsome Dan 
+0

Привет Эд, спасибо за обратную связь :) Так несколько вещей, которые мне были интересны: 1.) Результат 3 - «Человек-Человек» - как этот метод действительно ищет слова? 2.) Во-вторых, я должен сказать, что я смущен, где именно я должен вставлять переменные фрейма данных в этот код? Проводит ли этот метод по списку или мне приходится вручную вводить каждое слово? Извините за все вопросы и спасибо! – user3682157

+0

Вы не указали требования к совпадению, поэтому я предположил, что вам нужны совпадения целого слова, '\ b' в регулярном выражении ищет разрывы в начале и конце слова, это останавливает' и 'соответствие' '' '' '' '' '' '' '' '' '' ' , Поскольку df - это другой размер, вы можете изменить мой код, чтобы вернуть Серию или список, чтобы у каждой строки список совпадений. Да, это вручную перебирает список во втором df, который имеет bigrams. – EdChum

+0

Спасибо! я ценю это – user3682157

Смежные вопросы