如何实现:一列空(NA)时合并两列,双值场景返回error
解决方案
原始数据表格:
| A | B | C |
|---|---|---|
| x | 1 | NA |
| y | NA | 4 |
| z | 2 | NA |
| p | NA | 5 |
| t | 6 | 7 |
需求:新增列D,规则为:当B/C其中一列为NA时取非空列的值;两列均有值时返回error,最终结果如下:
| A | B | C | D |
|---|---|---|---|
| x | 1 | NA | 1 |
| y | NA | 4 | 4 |
| z | 2 | NA | 2 |
| p | NA | 5 | 5 |
| t | 6 | 7 | error |
以下是不同工具的实现方法:
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
相关产品推荐
相关产品推荐

