计算不同数据帧中两个列表之间的匹配数python

时间:2019-06-20 11:16:20

标签: python pandas list

我想计算一个数据帧中一个列表中的单词在另一个数据帧中另一个列表中的频率。 我的数据如下:

df6=pd.DataFrame({'variable':'irreplacable','Words':[['hi','ciao'],
['mine','yours']]})
df7=pd.DataFrame({'text':[['hi','is','this','ciao','ciao'],['hi','ciao']]})

所以现在我想计算df7.text的每个单元格中“ hi”和“ ciao”的频率,并在df7中创建一个包含此计数的新列

我试图为循环创建一个“ double”:

count_word = 0
for index,rows in df7.iterrows():
    for word in df7.text:
        if word in df6.iloc[0,1]:
            count_word = count_word +1
    df7['counter']=count_word

使用此代码,输出看起来像

   text                        counter
0  [hi, is, this, ciao, ciao]   0
1  [hi, ciao]                   0

而不是计数器的3和2

1 个答案:

答案 0 :(得分:1)

将生成器的sum用于计数True的值,将in用于测试成员资格:

df7['counter']= df7.text.apply(lambda x: sum(i in df6.iloc[0,1] for i in x))
print (df7)
                         text  counter
0  [hi, is, this, ciao, ciao]        3
1                  [hi, ciao]        2

有点修改解决方案,以将所有其他值测试到新列:

for v in df6['Words']:
    df7[', '.join(v)]= df7.text.apply(lambda x: sum(i in v for i in x))
print (df7)

                         text  hi, ciao  mine, yours
0  [hi, is, this, ciao, ciao]         3            0
1                  [hi, ciao]         2            0