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

如何在Pandas DataFrame中逐行检查条件并修改列?——基于np.select()的多条件处理方案

实现Pandas DataFrame多条件格式化Col1列的两种方案

你原来已经实现了针对AAA值的处理,现在要扩展到三个不同的格式化规则,同时只处理Col1非空的行,这里给你两种实用的实现方式,分别对应np.select()批量处理和自定义函数逐行处理的思路:

先准备基础变量

首先我们需要提前生成需要用到的日期和时间戳变量,避免重复计算:

import pandas as pd
import numpy as np
from datetime import datetime

# 获取当日日期,格式如20220809
today_date = datetime.today().strftime("%Y%m%d")
# 获取当日16点的时间戳格式,如20220809T160000.000000
today_16_ts = f"{today_date}T160000.000000"

方案一:用np.select()实现批量多条件处理

这种方法效率很高,适合大数据量的场景,通过定义条件列表和对应的值列表来批量赋值:

# 先确认Col1列存在
if "Col1" in df_csv_generator.columns:
    # 定义条件列表,每个条件都包含非空判断
    conditions = [
        (df_csv_generator["Col1"] == "AAA") & (df_csv_generator["Col1"].notnull()),
        (df_csv_generator["Col1"] == "BBB") & (df_csv_generator["Col1"].notnull()),
        (df_csv_generator["Col1"] == "CCC") & (df_csv_generator["Col1"].notnull())
    ]
    # 定义对应条件的格式化结果
    choices = [
        {"AAA": int(today_date)},
        {"BBB": True},
        {"CCC": today_16_ts}
    ]
    # 使用np.select批量赋值,默认值保留原Col1(如果不符合任何条件)
    df_csv_generator["Col1"] = np.select(conditions, choices, default=df_csv_generator["Col1"])

这里需要注意:np.select()会对整个列进行处理,我们在每个条件里都加上了Col1.notnull()的判断,确保只处理非空行;不符合三个条件的行会保留原来的Col1值,你也可以根据需求修改default参数。

方案二:自定义函数+apply逐行处理

如果你的逻辑后续可能有更复杂的扩展,用自定义函数的方式会更直观,可读性更强:

def format_col1(value):
    # 先判断值是否为空,空值直接返回
    if pd.isna(value):
        return value
    if value == "AAA":
        return {"AAA": int(today_date)}
    elif value == "BBB":
        return {"BBB": True}
    elif value == "CCC":
        return {"CCC": today_16_ts}
    else:
        # 不符合规则的返回原值
        return value

# 确认Col1列存在后应用函数
if "Col1" in df_csv_generator.columns:
    df_csv_generator["Col1"] = df_csv_generator["Col1"].apply(format_col1)

这种方式逐行处理每个值,逻辑清晰,后续要加新的规则直接在函数里加elif分支即可,适合逻辑多变的场景。

测试验证

用你给出的示例DataFrame测试:

# 构造示例DataFrame
df_csv_generator = pd.DataFrame({
    "ID": [1,2,3],
    "Col1": ["AAA", "BBB", "CCC"],
    "Col2": [1234,1456,4567]
})

运行上述任意一种方案后,df_csv_generator的Col1列就会变成你想要的格式化结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:53:09