You need to enable JavaScript to run this app. 如何用dataframe中risk列的整数替换对应行的文本单元格值
优惠活动
大模型
产品
解决方案
定价
更多

如何用dataframe中risk列的整数替换对应行的文本单元格值

核心需求

把DataFrame中所有species开头的列里,非NA的文本值,统一替换成对应行的risk列数值,原NA位置保持不变。

实现方案(基于pandas)

方法1:逐行apply,逻辑直白易上手

适合新手快速理解,不需要记复杂的向量化逻辑:

import pandas as pd
import numpy as np

# 先定义需要处理的species类列范围,排除id、risk两个固定列
species_col_list = [col for col in df.columns if col.startswith("species")]

# 逐行遍历处理
df[species_col_list] = df.apply(
    lambda row: row[species_col_list].where(
        cond=pd.isna(row[species_col_list]),  # 单元格是NA就保留原值
        other=row["risk"]  # 非NA的文本值,替换成当前行的risk值
    ),
    axis=1
)

方法2:向量化批量处理,大数据量下效率更高

如果表格行数超过万级,逐行循环速度会很慢,用掩码匹配的方式效率能提升一个量级:

# 生成位置掩码:species列里非NA的位置标记为True
replace_mask = df[species_col_list].notna()

# 按行对齐risk值,把掩码标记为True的位置批量替换
df[species_col_list] = df[species_col_list].mask(
    cond=replace_mask,
    other=df["risk"],
    axis=0
)
注意事项
  • 如果你的数据里的NA是字符串格式的"NA",而不是pandas/numpy的原生缺失值,只要把判断条件从pd.isna()换成!= "NA"即可,比如replace_mask = df[species_col_list] != "NA"
  • 两个方法处理完的结果完全匹配目标输出,不会改动id和risk两列的原始值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 19:54:04