如何用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)
代码说明
df.groupby('ID')['Score'].isna().all():按ID分组后,判断每个组的Score列是否所有值都是缺失值,返回一个以ID为索引、布尔值为结果的Series。all_na_ids[all_na_ids].index:筛选出结果为True的ID,这些就是Score全为NA的目标ID。- 用目标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
相关产品推荐
相关产品推荐

