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

Pandas如何基于另一列条件创建新列并处理指定列缺失值

错误原因

你的代码全部返回lts是两个问题导致的:

  • 第一个判断分支if np.where(clin["days_to_death"],np.nan,1):逻辑完全错误:np.where在这里返回的是数组对象,Python中非空对象的布尔判断永远为True,所以第一个分支永远触发,后续判断根本不会执行。
  • 你构造的原始数据中days_to_death列是字符串与nan混合的类型,直接调用astype(int)会触发类型错误,且你没有用正确的方法判断NA值。
正确实现

优先用pandas向量化操作实现,运行效率远高于apply方法,逻辑也更清晰:

import numpy as np
import pandas as pd
from math import nan

# 此处省略你提供的clin DataFrame构造代码

# 1. 先将days_to_death列转为数值类型,无法解析的字符串/空值统一转为pd.NA
clin["days_to_death"] = pd.to_numeric(clin["days_to_death"], errors="coerce")

# 2. 按规则生成SURV列
clin["SURV"] = np.where(
    clin["days_to_death"].isna() | (clin["days_to_death"] >= 2 * 365),
    "lts",
    "non-lts"
)

# 3. 删除除days_to_death外其他列包含NA的行
exclude_col = "days_to_death"
check_cols = clin.columns.drop(exclude_col)
clin = clin.dropna(subset=check_cols, how="any")

如果你一定要用自定义函数结合apply的写法,修正后的函数如下:

def survival(row):
    dtd = pd.to_numeric(row["days_to_death"], errors="coerce")
    if pd.isna(dtd) or dtd >= 2 * 365:
        return "lts"
    return "non-lts"

clin["SURV"] = clin.apply(survival, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:54:21