首页 > 解决方案 > 从字符串列表中检索匹配项并添加为数据框中的列

问题描述

我有一个数据框,其中包含列textuser.

用户 文本
汤姆 我爱香蕉
迪克 我爱苹果
哈利 我喜欢苹果和香蕉

我想查找text其中包含fruits. 对于每个匹配的字符串,都会将新行添加到新列fruitsfruits_with_colors. 预期输出如下:

用户 文本 水果
汤姆 我爱香蕉 香蕉
迪克 我爱苹果 苹果
哈利 我喜欢苹果和香蕉 苹果
哈利 我喜欢苹果和香蕉 香蕉

我在思考如何做到这一点时遇到了一些麻烦。我正在使用熊猫执行以下操作:

fruits = ['apples', 'bananas']

df_with_matches = df[df['text'].str.contains('|'.join(fruits))]

但我返回错误sequence item 0: expected str instance, list found

标签: pandaslistdataframe

解决方案


您可以使用str.findall将水果提取到列表中,然后使用explode它:

df.assign(fruits = df.text.str.findall('|'.join(fruits))).explode('fruits')

    user                        text   fruits
0    Tom              I love bananas  bananas
1   Dick               I love apples   apples
2  Harry   I love apples and bananas   apples
2  Harry   I love apples and bananas  bananas

推荐阅读