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

Python对比两列生成新列:寻求更具可读性的类SAS实现方案

高可读性Pandas新列赋值实现方案

你需要的判断逻辑非常清晰,不需要依赖np.select也能写出和SAS语法逻辑类似、易读易维护的代码,以下是几种常用实现方式:


方案1:布尔值直接转整数(最简洁)

逻辑说明:Pandas中布尔值True默认对应整数1,False对应整数0,直接把判断结果转换为int类型即可实现需求

import pandas as pd

df = pd.DataFrame({'id': [1,2,3,4,5,6,7,8,9],
                   'In': [111, 100, 31, 1100, 12, 33, 21, 32, 33],
                   'Out': [24, 52, 34, 95, 98, 54, 32, 20, 16]})

# 一行完成赋值,逻辑一目了然
df['check'] = (df['In'] > df['Out']).astype(int)
print(df)

方案2:where方法(和SAS的if/else语法逻辑最接近)

逻辑说明:where(判断条件, 不满足条件时的赋值)的写法和SAS的if分支逻辑完全对应,就算后续要增加判断条件也很好维护

# 写法和SAS的if/else步骤完全一致
df['check'] = 1
df['check'] = df['check'].where(df['In'] > df['Out'], 0)

# 也可以压缩为一行写法
df['check'] = (df['In'] > df['Out']).where(True, 0)

方案3:自定义函数+apply(可读性最高,适合复杂逻辑扩展)

逻辑说明:把判断逻辑全部封装在自定义函数里,每一步都可以单独加注释,后续要新增分支条件只需要修改函数即可,和SAS的data step逻辑完全对齐

def cal_check(row):
    # 对应SAS逻辑:if In > Out then check=1
    if row['In'] > row['Out']:
        return 1
    # 对应SAS逻辑:else check=0
    else:
        return 0

df['check'] = df.apply(cal_check, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:39:03