我想计算一个数据帧中一个列表中的单词在另一个数据帧中另一个列表中的频率。 我的数据如下:
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
答案 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