如何基于两个查找DataFrame从目标DataFrame提取产品与销售代表信息
解决方案:从字符串列中匹配提取产品和销售代表信息
我来帮你搞定这个需求,用Pandas就能轻松实现。下面是完整的步骤和代码,完全贴合你的示例场景:
1. 先准备示例数据
首先我们把你给出的三个DataFrame用代码还原出来,方便后续测试:
import pandas as pd # 主DataFrame df df = pd.DataFrame({ 'col': [ 'Highest Sales was for Mobile Scott', 'Lowest Returns was for Mobile Phone Steve', 'Low Returns was for Paul' ] }) # 产品DataFrame prod_df prod_df = pd.DataFrame({'product': ['Laptop', 'Computer', 'Mobile', 'Mobile Phone']}) # 销售代表DataFrame sales_rep_df sales_rep_df = pd.DataFrame({'sales_rep': ['Scott', 'Steve', 'Paul']})
2. 编写自定义提取函数
我们需要两个函数,分别从col列的字符串中匹配产品名和销售代表名:
# 提取产品名的函数 def extract_prod(text): prods = prod_df['product'].tolist() # 遍历产品列表,返回第一个匹配到的产品,没匹配到返回空字符串 for prod in prods: if prod in text: return prod return '' # 提取销售代表名的函数 def extract_rep(text): reps = sales_rep_df['sales_rep'].tolist() # 遍历销售代表列表,返回第一个匹配到的名字,没匹配到返回空字符串 for rep in reps: if rep in text: return rep return ''
3. 应用函数生成新列
用apply方法把这两个函数应用到col列,生成prod和rep列:
df['prod'] = df['col'].apply(extract_prod) df['rep'] = df['col'].apply(extract_rep)
4. 查看结果
运行上面的代码后,你就能得到预期的输出:
col prod rep 0 Highest Sales was for Mobile Scott Mobile 1 Lowest Returns was for Mobile Phone Steve Mobile Phone Steve 2 Low Returns was for Paul Paul
这个方案逻辑清晰,能灵活处理只有产品、只有销售代表或者两者都有的情况,完全适配你的示例场景。
内容的提问来源于stack exchange,提问作者Kevin Nash
相关产品推荐
相关产品推荐

