Pandas中基于marker匹配更新DataFrame指定列的问题求助
解决方法:按marker匹配更新retail列
你的代码无法生效的核心问题有两个:
- 条件判断逻辑错误:
inventory['marker'].equals(inventory2['marker'])要求两个DataFrame的marker列行数、顺序、每个值完全一致才会执行后续代码,但inventory2是仅包含变更数据的子集,显然不满足这个条件,导致替换逻辑根本没触发。 - 替换方法误用:
replace是全局值替换逻辑,不是按关联字段匹配替换,完全不符合你的需求。
针对80万行的大数据集,推荐两种高效的实现方式:
方法一:用映射字典匹配更新
这种方式内存占用低,处理大表效率高:
# 构建marker与对应retail的映射字典 retail_update_map = inventory2.set_index('marker')['retail'].to_dict() # 按marker匹配替换retail,未匹配到的保留原数据 inventory['retail'] = inventory['marker'].map(retail_update_map).fillna(inventory['retail'])
方法二:用update方法精准更新
update会自动按索引匹配更新,只修改匹配到的行:
# 将inventory2转换为以marker为索引的单列DataFrame update_source = inventory2.set_index('marker')[['retail']] # 临时将inventory的索引设为marker,执行更新后恢复原索引 inventory = inventory.set_index('marker') inventory.update(update_source) inventory = inventory.reset_index()
两种方法都能保证仅替换匹配到marker的行的retail值,其他列数据完全保留,且处理80万级别的数据效率都很高。
内容的提问来源于stack exchange,提问作者jumpman23
相关产品推荐
相关产品推荐

