首页 > 解决方案 > 如何根据包含条件的字符串创建新的数据框列

问题描述

我有一个如下的熊猫数据框:

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

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

标签: pythonpandasdataframeboolean

解决方案


您可以通过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                

推荐阅读