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

Python Pandas中基于两列缺失值状态生成标记列的实现咨询

解决Pandas DataFrame生成缺失值状态列的问题

嘿,作为Pandas新手遇到这种需求太正常了,我来帮你一步步实现!咱们先从你的输入数据开始,一步步生成你想要的第三列。

首先,先把你的初始代码写出来(记得要导入pandas和numpy哦):

import pandas as pd
import numpy as np

d = {'First': ['','','A','B','B','C'], 'Second': ['12', '', '10', '', '', '11']}
df = pd.DataFrame(data = d)

接下来,咱们需要根据两列的空值情况定义对应的状态。这里用numpy.select()会非常高效,它能根据多个条件匹配对应的结果。

步骤1:定义判断条件和对应结果

咱们先梳理四种情况,分别对应你想要的状态:

  • 两列都为空字符串 → missing
  • 仅First列有值(Second为空) → Firstfilled
  • 仅Second列有值(First为空) → Secondfilled
  • 两列都有值 → bothfilled

把这些条件和结果写成列表:

# 定义条件列表
conditions = [
    (df['First'] == '') & (df['Second'] == ''),
    (df['First'] != '') & (df['Second'] == ''),
    (df['First'] == '') & (df['Second'] != ''),
    (df['First'] != '') & (df['Second'] != '')
]

# 对应每个条件的结果
results = [
    'missing',
    'Firstfilled',
    'Secondfilled',
    'bothfilled'
]

步骤2:生成第三列

用np.select()把条件和结果关联起来,直接生成第三列:

df['Third'] = np.select(conditions, results)

验证结果

运行完上面的代码后,你的DataFrame就会变成你期望的样子:

First Second          Third
0        12     Secondfilled
1                missing
2    A     10     bothfilled
3    B          Firstfilled
4    B          Firstfilled
5    C     11     bothfilled

补充说明:如果缺失值是NaN的情况

如果你的数据里的缺失值是真正的NaN(而不是空字符串),只需要把判断条件里的== ''改成pd.isna(),!= ''改成~pd.isna()就可以了,比如:

# 假设DataFrame里的缺失值是NaN
d = {'First': [np.nan, np.nan, 'A','B','B','C'], 'Second': ['12', np.nan, '10', np.nan, np.nan, '11']}
df = pd.DataFrame(data = d)

# 调整后的条件
conditions = [
    pd.isna(df['First']) & pd.isna(df['Second']),
    ~pd.isna(df['First']) & pd.isna(df['Second']),
    pd.isna(df['First']) & ~pd.isna(df['Second']),
    ~pd.isna(df['First']) & ~pd.isna(df['Second'])
]

df['Third'] = np.select(conditions, results)

这样同样能得到正确的状态标记~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:03:13