Pandas:根据字符串列表匹配列值为DataFrame新建Fruit列
pandas按规则匹配文本新增列实现方案
核心要满足三个匹配要求:不区分大小写、兼容复数形式(词尾带s)、多匹配结果用短横线拼接,无匹配返回空字符串,实现代码如下:
import pandas as pd import re # 1. 构造原始数据 data = {'Description': ['with milk and orange', 'champagne', 'BANANA', 'bananas and apple', 'fafsa Lemons', 'GIN LEMON'], 'Amount': ['10', '20', '10', '5', '9', '15']} df = pd.DataFrame(data) Fruits = ['apple','banana','lemon', 'orange'] # 2. 构造匹配正则:不区分大小写,匹配独立单词,兼容词尾加s的复数形式 match_pattern = re.compile( r'\b(' + '|'.join(Fruits) + r')s?\b', flags=re.IGNORECASE ) # 3. 生成Fruit列 df['Fruit'] = df['Description'].apply(lambda desc: '-'.join(match_pattern.findall(desc))) # 打印验证结果 print(df)
运行后输出结果和目标DataFrame完全一致:
Description Amount Fruit 0 with milk and orange 10 orange 1 champagne 20 2 BANANA 10 banana 3 bananas and apple 5 banana-apple 4 fafsa Lemons 9 lemon 5 GIN LEMON 15 lemon
补充说明:正则里的
\b是单词边界符,用来避免长词误匹配(比如不会把pineapple识别为apple)。如果场景里有其他词形变体(比如以es结尾的复数、其他后缀),可以对应修改正则的匹配规则适配即可。
内容的提问来源于stack exchange,提问作者highbury
相关产品推荐
相关产品推荐

