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))