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

如何实现:一列空(NA)时合并两列,双值场景返回error

解决方案

原始数据表格:

ABC
x1NA
yNA4
z2NA
pNA5
t67

需求:新增列D,规则为:当B/C其中一列为NA时取非空列的值;两列均有值时返回error,最终结果如下:

ABCD
x1NA1
yNA44
z2NA2
pNA55
t67error

以下是不同工具的实现方法:

1. Excel/Google Sheets

在D2单元格输入公式后下拉填充:

=IF(COUNT(B2:C2)=2,"error",COALESCE(B2,C2))

兼容性更强的写法(适配不支持COALESCE的旧版Excel):

=IF(AND(NOT(ISNA(B2)),NOT(ISNA(C2))),"error",IF(ISNA(B2),C2,B2))

2. Python pandas

import pandas as pd
import numpy as np

# 构造数据
df = pd.DataFrame({
    'A': ['x', 'y', 'z', 'p', 't'],
    'B': [1, np.nan, 2, np.nan, 6],
    'C': [np.nan, 4, np.nan, 5, 7]
})

# 高效实现:先取非空值,再替换双非空的情况
df['D'] = df['B'].combine_first(df['C'])
df.loc[pd.notna(df['B']) & pd.notna(df['C']), 'D'] = 'error'

print(df)

3. R语言

# 构造数据
df <- data.frame(
    A = c('x', 'y', 'z', 'p', 't'),
    B = c(1, NA, 2, NA, 6),
    C = c(NA, 4, NA, 5, 7),
    stringsAsFactors = FALSE
)

# 用case_when实现清晰逻辑
library(dplyr)
df <- df %>%
    mutate(D = case_when(
        !is.na(B) & !is.na(C) ~ 'error',
        !is.na(B) ~ as.character(B),
        !is.na(C) ~ as.character(C),
        TRUE ~ NA_character_
    ))

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:45:23