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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:24:01