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

Python Pandas如何编写IF语句填充DataFrame新增列

Pandas按规则填充新列实现方法

全程所有操作不会修改原始Results列的数据,你可以放心运行,所有赋值都只作用于你提前插入好的新列。

核心逻辑拆分

你需要的判断逻辑不需要写复杂的多层IF,只需要把规则拆成两步走:

  • 先识别原Results列里属于A-E的合法值,直接复制到新列对应位置
  • 新列里剩下的空位置(对应原列是缺失值、"Not Applicable"、其他非A-E值的行),再做随机插补

可直接复用的代码

首先提前导入需要的依赖库,如果你已经导入过pandas可以跳过重复导入:

import pandas as pd
import random

# --------------------------
# 这里改成你自己的实际列名
NEW_COL_NAME = "你新建的列名"
# 固定合法等级集合,不需要修改
VALID_GRADES = {"A", "B", "C", "D", "E"}
# 如果需要随机结果可复现(方便审计核对),就设置随机种子,数字可以随便改
# 不需要固定结果的话可以把下面这行注释掉
random.seed(123)
# --------------------------

# 第一步:把原Results列的合法值复制到新列,非合法值位置留空
df[NEW_COL_NAME] = df["Results"].apply(lambda x: x if x in VALID_GRADES else None)

# 第二步:计算需要插补的行数,生成对应数量的随机等级
fill_num = df[NEW_COL_NAME].isna().sum()
fill_values = random.choices(list(VALID_GRADES), k=fill_num)

# 第三步:把随机生成的等级填到新列的空位置
df.loc[df[NEW_COL_NAME].isna(), NEW_COL_NAME] = fill_values

操作后校验方法(适合财会场景留痕核对)

跑完代码后可以执行3个简单检查,确认逻辑正确:

  1. 一致性校验:执行print((df.loc[df['Results'].isin(VALID_GRADES), 'Results'] == df.loc[df['Results'].isin(VALID_GRADES), NEW_COL_NAME]).all()),输出True就代表所有原列的合法值都完整复制到了新列,没有错改
  2. 取值校验:执行print(df[NEW_COL_NAME].unique()),输出结果应该只包含A/B/C/D/E五个值,没有空值、"Not Applicable"这类异常内容
  3. 原列完整性校验:执行print(df['Results'].isna().sum(), (df['Results'] == 'Not Applicable').sum()),输出的缺失值数量、"Not Applicable"数量和你操作前统计的数一致,就说明原列没有被改动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:24:57