You need to enable JavaScript to run this app. 如何在Python的pandas中复现SQL的Update CASE WHEN逻辑
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的pandas中复现SQL的Update CASE WHEN逻辑

需求逻辑梳理

首先拆解你提供的SQL更新逻辑,所有分支可简化为:Column1优先取Column3的值,只有当Column3为空时才取Column2的值,和Column2本身是否为空没有直接关联,和原SQL逐分支执行结果完全一致。

实现方案

你可以根据自己的使用习惯选择以下任意一种实现方式:

  • 最简写法(最推荐)
    直接用fillna填充空值,完全匹配简化后的逻辑:
import pandas as pd

# 假设你的数据表存储在变量df中
df['Column1'] = df['Column3'].fillna(df['Column2'])
  • 通用逻辑写法
    用np.where实现条件判断,可读性更高,也方便后续调整逻辑:
import pandas as pd
import numpy as np

df['Column1'] = np.where(
    df['Column3'].isna(),  # 条件:Column3为空
    df['Column2'],  # 满足条件时取Column2
    df['Column3']  # 不满足条件时取Column3
)
  • 逐分支匹配写法
    如果你需要完全对应原SQL的每一个CASE分支,避免逻辑简化带来的偏差,可以用pandas提供的case方法逐行匹配:
import pandas as pd

df['Column1'] = pd.case(
    [
        (df['Column2'].isna() & df['Column3'].isna(), df['Column3']),
        (df['Column2'].notna() & df['Column3'].isna(), df['Column2']),
        (df['Column2'].isna() & df['Column3'].notna(), df['Column3']),
        (df['Column2'].notna() & df['Column3'].notna(), df['Column3'])
    ],
    default=df['Column3']
)
注意事项

pandas中的空值(对应SQL的NULL)包含NaN、NaT等类型,判断空值时请使用isna()、notna()方法,不要使用== np.nan的写法,该写法会因为NaN不等于自身的特性得到错误的判断结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:27:04