根据条件连接单词和短语(Python 3,Pandas)

时间:2014-09-11 03:13:30

标签: python-3.x pandas

假设我有一个名为Single_Words的数据帧列表:

Words           
The               
Man           
Was             
Funny           
and             
Handsome        

然后是另一个单独的数据帧列表,名为Bigrams:

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

我想要做的是遍历Single_Words数据帧中的每个单词,然后将其连接到第二个列表中的bigram,其中只有bigram的第一个单词是相同的。

所以这是一个使用第一个数据帧中的'The'一词的示例输出,并迭代第二个数据帧将产生一个这样的新列表:

Words                     
The The Comedian          
The The Man               
The The Jokester          

使用'Man'从第一个数据框开始并迭代第二个数据框将给出:

  Words   
Man Down 

一旦我有了这个新列表并且已经遍历了初始列表,我计划通过再次访问原始的双字母表(最多5次)来冲洗并重复此过程。因此,回到'''示例,第二次迭代会像这样添加到列表

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

有人有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这很有效,我会尝试找到更好的方法。 基本上我使用re来搜索完整的单词(例如,这与帅不匹配)并构造一个dict并从该dict创建一个新的df:

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