如何根据包含条件的字符串创建新的数据框列

How to create a new columns of dataframe based on string containing condition

我有一个 pandas 数据框,如下所示:

df = pd.DataFrame({'Date':['10/2/2011', '11/2/2011', '12/2/2011', '13/2/2011'], 
                    'Phrases':['I have a cool family', 'I like avocados', 'I would like to go to school', 'I enjoy Harry Potter']}) 

以及关键字列表如下

l=['cool','avocado','lord of the rings']

我想在数据框中创建一个包含 True/False 值的新列。这将取决于“短语”中的每个实体是否包含列表“l”的一个或多个关键字。在这种情况下,新列应显示为 True、True、False、False。

这对于短数据帧来说很简单,

for i in ...
    str(bool([ele for ele in (keyword list) if(ele in df.Phrases[i])] ))

但是 for 循环对于 >1000000 行的数据帧是不合理的,就像我的真实数据帧一样。是否有更有效的方法来使用这些 True/False 值创建新列。

您可以使用 pd.Series.str.contains 将列表 l 作为 OR 字符串来完成:

import re
import pandas as pd

df = pd.DataFrame({'Date':['10/2/2011', '11/2/2011', '12/2/2011', '13/2/2011'], 
                    'Phrases':['I have a cool family', 'I like avocados', 'I would like to go to school', 'I enjoy Harry Potter']})

l=['cool','avocado','lord of the rings']

df['new_column']=df['Phrases'].str.contains('|'.join(l))

df['matched strings']=df['Phrases'].apply(lambda x: ','.join(re.findall('|'.join(l),x)))


df
Out[18]: 
        Date                       Phrases  new_column matched strings
0  10/2/2011          I have a cool family        True            cool
1  11/2/2011               I like avocados        True         avocado
2  12/2/2011  I would like to go to school       False                
3  13/2/2011          I enjoy Harry Potter       False