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

基于name列分组的大数据miceforest缺失值插补方案咨询

基于name分组的miceforest缺失值填充方案

我们有一个规模庞大的数据库(包含数百万行数据与数百万个姓名),需要基于name列做类似groupby的分组操作后,使用miceforest对每组数据分别进行缺失值插补。以下是示例数据与需求说明:

示例数据代码

data = {'name':  ['Alex', 'Ben', 'Marry','Alex', 'Ben', 'Marry'],
        'job': ['teacher', 'doctor', 'engineer','teacher', 'doctor', 'engineer'],
        'age': [27, 32, 78,27, 32, 78],
        'weight': [160, 209, 130,164, 206, 132],
        'meal_price': [8, 11, 27, 19, 7, 10],
        'date': ['6-12-2022', '6-12-2022', '6-12-2022','6-13-2022', '6-13-2022', '6-13-2022']
        }

带缺失值的示例DataFrame

namejobageweightmeal_pricedate
0Alexteacher2716086-12-2022
1Bendoctor32209116-12-2022
2Marryengineer78130276-12-2022
3Alexteacher27164196-13-2022
4Bendoctor3220676-13-2022
5Marryengineer78132106-13-2022
6AlexteacherNaNNaNNaN6-14-2022
7BendoctorNaNNaNNaN6-14-2022
8MarryengineerNaNNaNNaN6-14-2022

解决方案实现

1. 安装必要依赖

确保已安装pandas和miceforest:

pip install pandas miceforest

2. 构造带缺失值的DataFrame

先基于示例数据创建基础数据集,再添加含缺失值的行:

import pandas as pd
import miceforest as mf

# 构造基础数据
data = {'name':  ['Alex', 'Ben', 'Marry','Alex', 'Ben', 'Marry'],
        'job': ['teacher', 'doctor', 'engineer','teacher', 'doctor', 'engineer'],
        'age': [27, 32, 78,27, 32, 78],
        'weight': [160, 209, 130,164, 206, 132],
        'meal_price': [8, 11, 27, 19, 7, 10],
        'date': ['6-12-2022', '6-12-2022', '6-12-2022','6-13-2022', '6-13-2022', '6-13-2022']
        }
df = pd.DataFrame(data)

# 添加含缺失值的行
missing_rows = pd.DataFrame({
    'name': ['Alex', 'Ben', 'Marry'],
    'job': ['teacher', 'doctor', 'engineer'],
    'age': [pd.NA, pd.NA, pd.NA],
    'weight': [pd.NA, pd.NA, pd.NA],
    'meal_price': [pd.NA, pd.NA, pd.NA],
    'date': ['6-14-2022', '6-14-2022', '6-14-2022']
})
df = pd.concat([df, missing_rows], ignore_index=True)

3. 按name分组执行插补

遍历每个name分组,对每组数据单独训练miceforest模型并填充缺失值,最后合并所有结果:

# 存储插补后的结果
filled_dfs = []

# 按name分组处理
for name, group in df.groupby('name'):
    # 初始化miceforest插补器,参数可根据实际场景调整
    kernel = mf.ImputationKernel(
        group,
        datasets=5,  # 生成的插补数据集数量
        save_all_iterations=True,
        random_state=42
    )
    
    # 运行插补迭代
    kernel.mice(5)  # 迭代次数,可根据数据规模调整
    
    # 获取插补后的数据集(这里取第一个插补结果,也可按需合并多个结果)
    filled_group = kernel.complete_data(0)
    filled_dfs.append(filled_group)

# 合并所有分组的插补结果
final_df = pd.concat(filled_dfs, ignore_index=True)

4. 结果验证

查看最终填充后的数据集:

print(final_df)

大规模数据优化建议

针对数百万行、数百万个姓名的超大规模数据,可通过以下方式提升效率:

  • 过滤数据量过少的分组(比如仅1-2条数据的分组,插补参考价值低)
  • 采用并行处理(如multiprocessing库对分组进行并行插补)
  • 调整miceforest参数:减少datasets数量、降低迭代次数,平衡插补效果与速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:45:33