You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按字典列表值匹配替换DataFrame列值?

问题描述

已知有类似问题讨论,但仍需解决以下场景:当DataFrame中Col列的取值存在于某个字典的列表型值中时,用字典对应的键替换该列值。

示例数据

import pandas as pd

df = pd.DataFrame({"Col": ["Apple", "Appy", "aple","Banana", "Banaa", "Banananan", "Carrot", "Mango", "Pineapple"]})
remap_dict = {"Apple": ["Appy", "aple"],
              "Banana": ["Banaa", "Banananan"]}

直接使用Pandas的replace方法无法处理值为列表的字典:

df["Col"].replace(remap_dict, regex=True)

需要实现的效果是:将Col列中属于字典列表值的元素,替换为对应的字典键,其余值保持不变。

期望输出

Col
0   Apple
1   Apple
2   Apple
3   Banana
4   Banana
5   Banana
6   Carrot
7   Mango
8   Pineapple
解决方案

方法1:反转字典结构后使用replace

先把原字典反转,生成{别名: 目标值}的结构,这样就能直接用replace方法处理:

# 反转字典,将列表中的每个别名映射到对应键
reverse_dict = {alias: key for key, aliases in remap_dict.items() for alias in aliases}
# 执行替换操作
df["Col"] = df["Col"].replace(reverse_dict)

执行后,Col列中属于reverse_dict键的元素会被替换为对应的值,其余元素保持原样,完全符合需求。

方法2:使用map结合get方法

基于反转后的字典,用map配合get方法,指定默认值为原元素,实现映射替换:

reverse_dict = {alias: key for key, aliases in remap_dict.items() for alias in aliases}
df["Col"] = df["Col"].map(lambda x: reverse_dict.get(x, x))

这种方法和方法1效果一致,若后续需要扩展映射逻辑,调整lambda表达式即可。

内容的提问来源于stack exchange,提问作者Ailurophile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:00:59