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

Pandas如何按条件用另一列值填充DataFrame指定列空值

问题场景

现有如下结构的Pandas DataFrame:

data = {'feature1_in_use?': [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1],
     'feature1_available?': [0, 1, 1, 'NA', 1, 'NA', 1, 1, 'NA', 1, 1]}

df = pd.DataFrame(data)

需要对feature1_available?列的'NA'值执行条件填充,规则如下:

  • 同一行feature1_in_use?列取值为1时,对应位置的'NA'填充为1
  • 其余位置的'NA'统一填充为'X'

填充后期望得到的DataFrame效果如下:

data = {'feature1_in_use?': [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1],
     'feature1_available?': [0, 1, 1, 'X', 1, 1, 1, 1, 1, 1, 1]}

df = pd.DataFrame(data)
实现方案

直接用numpy.where做逐行条件判断即可,无需写循环,执行效率高,逻辑清晰:

import pandas as pd
import numpy as np

# 原始数据
data = {'feature1_in_use?': [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1],
     'feature1_available?': [0, 1, 1, 'NA', 1, 'NA', 1, 1, 'NA', 1, 1]}
df = pd.DataFrame(data)

# 双层条件判断完成填充
df['feature1_available?'] = np.where(
    # 第一层判断:定位到值为'NA'的位置
    df['feature1_available?'] == 'NA',
    # 第二层判断:in_use为1填1,否则填'X'
    np.where(df['feature1_in_use?'] == 1, 1, 'X'),
    # 非'NA'的位置保留原有值
    df['feature1_available?']
)

注意:当前数据中的缺失值是字符串格式的'NA',如果你的数据里是Pandas可识别的空值(np.nan/None),只需要把第一层判断条件替换为df['feature1_available?'].isna()即可。

执行后打印df,得到的结果和预期完全一致:

feature1_in_use? feature1_available?
0                  0                   0
1                  0                   1
2                  1                   1
3                  0                   X
4                  1                   1
5                  1                   1
6                  1                   1
7                  0                   1
8                  1                   1
9                  0                   1
10                 1                   1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:36:17