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

如何用pandas Lambda函数按条件匹配JSON更新指定列数据?

问题与解决方案

原始数据

Col ACol BCol C
NananaNMRETIRED
PopopoPORETIRED
CececeZXWORK
LalalaABWORK

映射关系

{
"NM":"Nano Master",
"PO":"Prank Operation"
}

需求

当Col C的值为RETIRED,且Col B的值存在于上述JSON的键中时,将Col A的值替换为JSON对应键的取值。对应SQL逻辑:

UPDATE TABLE SET COL_A = JSON WHERE COL_C='RETIRED' AND COL_B = JSON->>'key'

错误尝试

你之前用的Lambda函数存在条件判断错误,没有匹配需求逻辑:

df[COL_A] = df.apply(lambda x: "col_b" if x["COL_B"] == "RETIRED" else x["COL_A"], axis=1)

正确实现方式

方法1:修正apply逻辑

先把JSON转为Python字典,再在apply里正确判断条件:

import pandas as pd

# 构造原始数据集
data = {
    "Col A": ["Nanana", "Popopo", "Cecece", "Lalala"],
    "Col B": ["NM", "PO", "ZX", "AB"],
    "Col C": ["RETIRED", "RETIRED", "WORK", "WORK"]
}
df = pd.DataFrame(data)

# JSON映射转为Python字典
mapping = {
    "NM": "Nano Master",
    "PO": "Prank Operation"
}

# 修正后的apply逻辑
df["Col A"] = df.apply(
    lambda x: mapping[x["Col B"]] if x["Col C"] == "RETIRED" and x["Col B"] in mapping else x["Col A"],
    axis=1
)

方法2:矢量化操作(推荐,效率更高)

避免使用apply,改用loc筛选目标行,再通过map批量替换值:

# 筛选符合条件的行:Col C为RETIRED,且Col B在映射键集合内
mask = (df["Col C"] == "RETIRED") & (df["Col B"].isin(mapping.keys()))

# 对目标行更新Col A的值
df.loc[mask, "Col A"] = df.loc[mask, "Col B"].map(mapping)

执行后得到的最终结果:

Col ACol BCol C
Nano MasterNMRETIRED
Prank OperationPORETIRED
CececeZXWORK
LalalaABWORK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:25:38