Python 对于dataframe中的每一行,检查该行是否包含列表中的字符串

Python 对于dataframe中的每一行,检查该行是否包含列表中的字符串,python,pandas,Python,Pandas,我有一个给定的字符串列表,如下所示: List=['plastic', 'carboard', 'wood'] 我的数据框中有一列数据类型字符串,如下所示: Column=['beer plastic', 'water cardboard', 'eggs plastic', 'fruits wood'] New_Column=['beer', 'water', 'eggs', 'fruits'] 对于列中的每一行,我想知道该行是否包含列表中的一个单词,如果是,我想只保留该单词前面的文本,如

我有一个给定的字符串列表,如下所示:

List=['plastic', 'carboard', 'wood']
我的数据框中有一列数据类型字符串,如下所示:

Column=['beer plastic', 'water cardboard', 'eggs plastic', 'fruits wood']
New_Column=['beer', 'water', 'eggs', 'fruits']
对于列中的每一行,我想知道该行是否包含列表中的一个单词,如果是,我想只保留该单词前面的文本,如下所示:

Column=['beer plastic', 'water cardboard', 'eggs plastic', 'fruits wood']
New_Column=['beer', 'water', 'eggs', 'fruits']
有没有办法对我的数据帧的每一行(数百万行)进行系统化?谢谢

我已经尝试过用正则表达式模式匹配来构建一个函数,如下所示

pattern=re.compile('**Pattern to be defined to include element from list**')

def truncate(row, pattern):
    Column=row['Column']
    if bool(pattern.match(Column)):
        Column=Column.replace(**word from list**,"")
        return Column

df['New_column']=df.apply(truncate,axis=1, pattern=pattern)

使用
str.findall

df[0].str.findall('\w+\s*(?=' + '|'.join(l) +')').apply(lambda x: x[0].strip() if len(x) else 'NotFound')

##output

0      beer
1     water
2      eggs
3    fruits
Name: 0, dtype: object
如果要运行工作示例,请执行以下操作:

import pandas as pd

List=['plastic', 'carboard', 'wood']
df = pd.DataFrame([{'c1':"fun carboard", 'c2':"jolly plastic"}, {'c1':"meh wood",'c2':"aba"}, {'c1':"aaa",'c2':"bbb"}, {'c1':"old wood",'c2':"bbb"}])

for index, row in df.iterrows():
    for word in List:
        row['c1'] = row['c1'].partition(word)[0] if (word in row['c1']) else row['c1']
        row['c2'] = row['c2'].partition(word)[0] if (word in row['c2']) else row['c2']
df