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

Pandas中基于双条件分组并用众数填充缺失值问题

问题需求

对数据集中Product1为A且Product2为B的行进行分组,针对该分组内Value列的缺失值,使用组内众数进行填充。

原始数据集

Product1Product2Value
AB10
ABNaN
AB10
AC20
BB30
ABNaN

预期输出

Product1Product2Value
AB10
AB10
AB10
AC20
BB30
AB10

尝试的错误代码

data['Value'] = np.where((data['Product1'] =='A') & (data['Product2'] =='B'),merged['Value'].fillna(data['value'].mode()[0]),data['value'])

问题分析与正确解法

这段尝试代码存在多处问题:

  • 变量名大小写不一致:混用了Value和value(Python对大小写敏感)
  • 无意义引用merged变量,且未针对目标分组计算组内众数,错误使用了全数据集的众数

方法一:直接定位填充(高效简洁)

import pandas as pd
import numpy as np

# 计算目标分组的Value列众数
target_group_mode = data[(data['Product1'] == 'A') & (data['Product2'] == 'B')]['Value'].mode()[0]

# 仅对目标分组内的缺失值进行填充
data.loc[(data['Product1'] == 'A') & (data['Product2'] == 'B') & data['Value'].isna(), 'Value'] = target_group_mode

方法二:分组批量处理(扩展性强)

如果后续需要对多组执行类似填充逻辑,推荐用分组处理:

def fill_group_mode(group):
    # 仅对指定分组执行众数填充
    if group['Product1'].iloc[0] == 'A' and group['Product2'].iloc[0] == 'B':
        group['Value'] = group['Value'].fillna(group['Value'].mode()[0])
    return group

# 按Product1和Product2分组处理
data = data.groupby(['Product1', 'Product2'], group_keys=False).apply(fill_group_mode)

代码说明

  • 方法一直接定位目标分组的缺失值,用预计算的组内众数填充,执行效率更高
  • 方法二通过分组逻辑处理,可灵活扩展到其他分组的填充需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:06:21