基于Pandas实现DataFrame列匹配及Product_ID校验的技术问询
解决DataFrame匹配与Product_ID校验问题
需求
- 将
consolidate_df的Source2/Source3列与scheduler_df的Spider列匹配,生成isScheduler列标记匹配结果(True/False) - 若
isScheduler为True,校验对应scheduler_df中的Product_ID是否为12345,生成isProd列标记结果
数据示例
consolidate_df
Source2 Source3 Jen_Arrest Jen_Jail Ben_Arrest Ben_Jail
scheduler_df
Spider Product_ID Jen_Arrest 88888 Ben_Arrest 12345
现有代码
import pandas as pd import os consolidate_df = pd.read_excel(os.path.join(path, consolidated_fn), sheet_name='Poseidon-2') scheduler_df = pd.read_excel(os.path.join(path, scheduler_fn)) # 注意:原代码中列名为Source_2,示例中为Source2,需根据实际数据修正列名 consolidate_df['isScheduler'] = consolidate_df['Source2'].isin(scheduler_df['Spider']) | consolidate_df['Source3'].isin(scheduler_df['Spider'])
解决方案
要生成isProd列,核心是建立Spider与「Product_ID是否为12345」的映射关系,再匹配到consolidate_df中:
- 从
scheduler_df生成映射字典,键为Spider值,值为对应Product_ID是否等于12345 - 遍历
consolidate_df每一行,检查Source2或Source3是否在映射字典中,取出对应的校验结果
完整代码如下:
import pandas as pd import os consolidate_df = pd.read_excel(os.path.join(path, consolidated_fn), sheet_name='Poseidon-2') scheduler_df = pd.read_excel(os.path.join(path, scheduler_fn)) # 生成isScheduler列(确保列名与实际数据一致) consolidate_df['isScheduler'] = consolidate_df['Source2'].isin(scheduler_df['Spider']) | consolidate_df['Source3'].isin(scheduler_df['Spider']) # 建立Spider到Product_ID是否为12345的映射 prod_check_map = scheduler_df.set_index('Spider')['Product_ID'].eq(12345).to_dict() # 生成isProd列:匹配到Spider则取对应校验结果,否则为False consolidate_df['isProd'] = consolidate_df.apply( lambda row: prod_check_map.get(row['Source2'], False) or prod_check_map.get(row['Source3'], False), axis=1 ) # 提取目标列输出 result_df = consolidate_df[['Source2', 'isScheduler', 'isProd']] print(result_df)
最终输出结果
Source2 isScheduler isProd Jen_Arrest True False Ben_Arrest True True
内容的提问来源于stack exchange,提问作者python2134
相关产品推荐
相关产品推荐

