Python 根据条件创建并填充DataFrame列

Python 根据条件创建并填充DataFrame列,python,pandas,Python,Pandas,我有一个数据框,我需要创建一个新列,并根据文本中单词列表中的单词数量填充值。我正在尝试对以下代码进行反编码: df = pd.DataFrame({'item': ['a1', 'a2', 'a3'], 'text': ['water, rainbow', 'blue, red, white','country,school,magic']}) list_of_words = ['water', 'pasta', 'black', 'magic', 'glas

我有一个数据框,我需要创建一个新列,并根据文本中单词列表中的单词数量填充值。我正在尝试对以下代码进行反编码:

df = pd.DataFrame({'item': ['a1', 'a2', 'a3'], 
               'text': ['water, rainbow', 'blue, red, white','country,school,magic']})


list_of_words = ['water', 'pasta', 'black', 'magic', 'glasses', 'school' ,'book']

for index,row in df.iterrows():
    text = row['text']
        count_found_words = 0
        for word in list_of_words:
            found_words= re.findall(word, text)
            if len(found_words)>0:
                count_found_words += 1
        df['found_words'] = count_found_words
这段代码实际上创建了一个新列,但用循环的最后一个“count\u found\u words”填充所有行


有正确的方法吗?

您可以定义一个函数count\u words,返回count\u found\u words并使用
df['found\u words']=df['text'].map(count\u words)

这形成了regex
\b(水|意大利面|黑色|魔法|眼镜|学校|书籍)
,用于查找列表中的任何单词。通过
.len

查找所有匹配项并报告匹配数,或者您可以尝试:

df['found_words'] = df.text.str.split(',').apply(
    lambda x: sum(i in list_of_words for i in x))

你的解决方案有效吗?需要改进什么才能使其更好?不起作用,它用相同的值填充所有列,这些值来自上一个循环。您应该始终包含一个最小的数据示例。只要能说明问题,就可以编造数据。将
df['found\u words']=count\u found\u words
更改为
df.loc[index,'found\u words']=count\u found\u words
更好,谢谢
df['found_words'] = df.text.str.split(',').apply(
    lambda x: sum(i in list_of_words for i in x))