Pandas - 如果列包含列表中的任何值而不是全部,则使用isin返回

时间:2018-05-15 17:09:20

标签: python pandas

很抱歉有一个基本的问题,对python / pandas来说很新。

我正在尝试从我的数据库创建一个列,该列返回True或False,以确定另一列是否包含字符串列表中的任何(不是全部)字符串。目前我的代码如下所示:

keywords_list = ["foo, bar, ..etc]

df['relevant'] = df['Description'].isin(keywords_list)

我知道我的'Description'列包含列表中的一些值,但它返回all为false。我看过类似的stackoverflow问题(见下文),他们都说要做我正在做的事情。但是pandas文档(也在下面)说,只有当它包含列表中的所有值时才会起作用。是否有一个我可以使用的函数,如果列包含列表中的任何值,它将返回?请帮忙!

Filter out rows based on list of strings in Pandas https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html

2 个答案:

答案 0 :(得分:1)

使用pandas.Series.str.contains

df['Description'].str.contains('|'.join(keywords_list))

答案 1 :(得分:1)

您可能需要使用split分隔单词,然后使用isin

df = pd.DataFrame({'Description': ['foo bar blah', 'new foo', 'newfoo', 'bar']})
keywords_list = ["foo", "bar"]

df['Description'].str.split(expand = True).isin(keywords_list).any()