Python pandas处理缺失值后如何校验单列分组下的重复行是否完全一致
pandas 分组校验与缺失值填充实现方案
实现逻辑
- 第一步:按A列对数据集分组,逐组校验除A列外的所有列,非空值的唯一数量必须≤1,存在任意分组不符合规则则判定数据集无效
- 第二步:校验通过后,逐组对每列用该组内的唯一非空值填充所有缺失值,若某列全为空则保持不变
完整可运行代码
import pandas as pd import numpy as np def process_pandas_data(df): # 按A列分组 groups = df.groupby('A', group_keys=False) # 校验分组是否合法 def check_group_valid(group): for col in group.columns.drop('A'): # 统计当前列非空唯一值数量 non_na_unique = group[col].dropna().unique() if len(non_na_unique) > 1: return False return True valid_result = groups.apply(check_group_valid) invalid_groups = valid_result[~valid_result].index.tolist() if invalid_groups: raise ValueError(f"数据集校验失败,无效A值分组:{invalid_groups}") # 校验通过后填充缺失值 def fill_group_na(group): for col in group.columns.drop('A'): non_na_unique = group[col].dropna().unique() if len(non_na_unique) == 1: group[col] = group[col].fillna(non_na_unique[0]) return group return groups.apply(fill_group_na).reset_index(drop=True)
测试验证
无效数据集测试
输入题目给出的无效数据集:
invalid_df = pd.DataFrame({ 'A': ['foo', 'foo', 'foo', 'bar', 'foo'], 'B': [2, np.nan, 1, np.nan, np.nan], 'C': [3, np.nan, 4, np.nan, np.nan] }) process_pandas_data(invalid_df)
运行后会抛出预期异常:ValueError: 数据集校验失败,无效A值分组:['foo']
有效数据集测试
输入题目给出的有效数据集:
valid_df = pd.DataFrame({ 'A': ['foo', 'foo', 'foo', 'bar', 'foo'], 'B': [2, np.nan, np.nan, 1, 2], 'C': [3, np.nan, 3, np.nan, np.nan] }) processed_df = process_pandas_data(valid_df) print(processed_df)
输出结果完全符合预期:
A B C 0 foo 2.0 3.0 1 foo 2.0 3.0 2 foo 2.0 3.0 3 bar 1.0 NaN 4 foo 2.0 3.0
内容的提问来源于stack exchange,提问作者Abdelfattah Boutanes
相关产品推荐
相关产品推荐

