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

如何在Pandas列的列表中重命名值并保留唯一值

解决Pandas DataFrame列表列的元素替换与去重问题

首先,你当前的代码存在一个核心问题:df["matches"].str.replace("pink","red") 是针对字符串的替换操作,但matches列的元素是列表类型。这样处理会把整个列表转换成字符串后再做替换,最终得到的是字符串而非列表,而且没法批量处理多个替换规则,更没实现去重的需求。

下面是完全贴合你需求的完整解决方案:

步骤1:定义替换规则与处理函数

我们先明确替换映射关系,再通过apply遍历每个列表的元素完成替换,最后对替换后的列表做去重处理。

import pandas as pd

# 构建你的示例数据
data = {
    "text": ["flowers are red.", "airplanes are blue.", "xxxxxxxx"],
    "matches": [["red", "yellow", "pink"], ["blue", "indigo"], ["orange"]]
}
df = pd.DataFrame(data)

# 定义替换规则:键是原元素值,值是要替换成的目标值
replace_rules = {
    "pink": "red",
    "yellow": "red",
    "blue": "indigo"
}

# 处理元素替换的函数:遍历列表每个元素,应用替换规则
def apply_replace(lst):
    # 先清理元素前后的空格(比如处理示例中[blue, indigo]里的空格)
    cleaned_items = [item.strip() for item in lst]
    # 对每个元素应用替换,不在规则里的元素保持原样
    return [replace_rules.get(item, item) for item in cleaned_items]

# 处理去重的函数:保留元素原始顺序的同时去重(Python 3.7+支持)
def get_unique(lst):
    return list(dict.fromkeys(lst))

步骤2:生成rename和final列

把上面的函数应用到DataFrame的matches列,生成你需要的结果列:

# 生成rename列:完成所有元素的替换操作
df["rename"] = df["matches"].apply(apply_replace)

# 生成final列:对替换后的列表去除重复值
df["final"] = df["rename"].apply(get_unique)

最终输出结果

运行代码后得到的DataFrame如下:

text                matches          rename    final
0    flowers are red.  [red, yellow, pink]  [red, red, red]     [red]
1  airplanes are blue.      [blue, indigo]  [indigo, indigo]  [indigo]
2              xxxxxxxxx           [orange]        [orange]  [orange]

关于你给出的期望输出说明

你提供的期望输出中,airplanes are blue.行的rename是[blue, blue]、final是[blue],这和你描述的“blue替换为indigo”规则不符。如果实际需求是把indigo替换为blue,只需修改替换规则字典为:

replace_rules = {
    "pink": "red",
    "yellow": "red",
    "indigo": "blue"
}

调整后就能得到你示例中的期望结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:01:44