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

如何提取两个data.frame中至少一个存在NA值的对应行名

问题描述

现有两个结构相似的DataFrame,数据示例如下:

df1

c1-1       c2-45      c3-65      c4-88         c5-97
r1        NA    0.598817857 0.053798422 0.776829475      NA
r2  0.481191121 0.67205121  0.50231424  0.933501988 0.169838618
r3  0.127680486       NA    0.188186772       NA    0.410198769
r4  0.448870194 0.372560979 0.627946034 0.277422856 0.540501786
r5  0.828152448 0.962372344 0.72686092  0.881644452 0.822969723

df2

c1-24     c2-98     c3-77        c4-82       c5-9
r1  0.528260595 0.602697657 0.15193253  0.458712206 0.785602995
r2  0.250479754 0.999715659 0.575051699     NA      0.830962509
r3     NA           NA      0.733031402 0.189934875 0.554902551
r4  0.160801532 0.611729999 0.665725625 0.966146299 0.005503371
r5  0.483603251 0.306977032 0.377184726 0.109827232 0.63159439

两个DataFrame的行名完全一致,列名仅-后的后缀不同,-前的标识一一对应。需求为输出至少在其中一个DataFrame中存在NA值的行名,上述示例的预期输出为:r1、r2、r3。

实现方案

R语言实现

核心逻辑是先分别判断两个DataFrame每行是否存在NA,再取两个判断结果的并集,最后提取对应行名:

# 逐行判断df1是否存在NA,返回布尔向量
df1_na_flag <- rowSums(is.na(df1)) > 0
# 逐行判断df2是否存在NA,返回布尔向量
df2_na_flag <- rowSums(is.na(df2)) > 0

# 取并集筛选符合要求的行名
target_rows <- rownames(df1)[df1_na_flag | df2_na_flag]

# 输出结果
print(target_rows)

运行后输出为"r1" "r2" "r3",和预期一致。

Python Pandas实现

逻辑和R实现一致,用pandas内置的逐行判断方法实现:

import pandas as pd

# 逐行判断是否存在NA,取两个表的并集布尔掩码
na_mask = df1.isna().any(axis=1) | df2.isna().any(axis=1)
# 提取对应行名转为列表
target_rows = df1[na_mask].index.tolist()

print(target_rows)

运行后输出为['r1', 'r2', 'r3']。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:02