Python pandas实现不同DataFrame逗号分隔字符串匹配及关联列新增
解决方案
你的原始代码存在3个核心问题:
- 逻辑运算符优先级错误:
&优先级高于==,不加括号会导致判断逻辑完全混乱 - 未处理多值匹配逻辑:DF Two的
col item是逗号分隔的多值字符串,不能直接和DF One的单值col item做全等判断 - 未处理字符串冗余空格:原始数据的文本字段存在大量首尾空格,会导致看起来内容相同的字段匹配失败
实现代码
import pandas as pd # 第一步:统一处理所有文本字段的首尾空格,消除匹配误差 df_one['col name'] = df_one['col name'].str.strip() df_one['col item'] = df_one['col item'].str.strip() df_two['col name'] = df_two['col name'].str.strip() df_two['col item'] = df_two['col item'].str.strip() # 第二步:拆分DF Two的多值col item,展开为一行对应单个item的格式 df_two_exploded = df_two.assign( # 按逗号拆分多值字段为列表 single_item = df_two['col item'].str.split(',') ).explode('single_item') # 处理拆分后单个item的首尾空格 df_two_exploded['single_item'] = df_two_exploded['single_item'].str.strip() # 第三步:关联匹配,把对应col code写入DF One新列 df_one = df_one.merge( # 只取匹配需要的三个字段,避免冗余 df_two_exploded[['col name', 'single_item', 'col code']], # 匹配规则:col name相同,且DF One的col item等于拆分后的单个item left_on = ['col name', 'col item'], right_on = ['col name', 'single_item'], # 左连接保留DF One所有原始行,未匹配到的新列值为NaN how = 'left' # 重命名新列,删除冗余字段 ).rename(columns={'col code': 'new_col'}).drop(columns='single_item')
如果需要给未匹配到的行填充默认值,可以在上述代码执行后添加:
df_one['new_col'] = df_one['new_col'].fillna('你需要的默认值')
内容的提问来源于stack exchange,提问作者tibaH_lluN
相关产品推荐
相关产品推荐

