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

如何用Pandas筛选仅含NA值的ID并生成新DataFrame

筛选Score全为NA的ID并生成单条记录的DataFrame

你的代码用count()统计的是非缺失值的数量,虽然能定位到Score全为NA的ID(count为0),但没有完成生成目标DataFrame的步骤。以下是直接可行的实现方式:

完整代码

import numpy as np
import pandas as pd

nan = np.nan
df = pd.DataFrame({'ID':[1,1,1,2,2,3,3,3],
                'Score':[95,nan,nan,nan,100,nan,nan,nan],
                 'Date':['1-1-2022','1-1-2022','2-1-2022','1-1-2022','2-1-2022',
                         '1-1-2022','1-1-2022', '2-1-2022']})

# 筛选所有Score列全为缺失值的ID
all_na_ids = df.groupby('ID')['Score'].isna().all()
target_ids = all_na_ids[all_na_ids].index

# 生成仅含目标ID且每个ID一条记录的DataFrame
result_df = pd.DataFrame({'ID': target_ids})

print(result_df)

代码说明

  1. df.groupby('ID')['Score'].isna().all():按ID分组后,判断每个组的Score列是否所有值都是缺失值,返回一个以ID为索引、布尔值为结果的Series。
  2. all_na_ids[all_na_ids].index:筛选出结果为True的ID,这些就是Score全为NA的目标ID。
  3. 用目标ID生成新的DataFrame,自动保证每个ID只保留一条记录。

扩展:保留原数据的完整记录

如果需要保留该ID在原数据中的任意一条完整记录(包含Date列),可以用以下代码:

result_df_full = df[df['ID'].isin(target_ids)].drop_duplicates(subset='ID')
print(result_df_full)

输出示例:

ID  Score      Date
5   3    NaN  1-1-2022

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:36:18