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

基于对应id列众数填充x1缺失值时ValueError问题的解决方法

按ID分组用众数填充x1列缺失值的问题解决

需求说明

需要将DataFrame中x1列的缺失值,替换为对应id分组下x1列的众数。例如id=1时,x1的众数是'e',就用它填充该分组内的x1缺失值。


正常运行的示例

示例DataFrame df1

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'id': [1, 1, 2, 3, 1, 1, 1, 1, 4, 5],
                   'x1': ['a', np.nan, 'b', 'c', 'e', 'e', 'e', 'f', 'g', 'h']})

可行代码(处理df1)

参考逻辑编写的代码可正常完成填充:

dict_id_to_x1_mode = df1.groupby('id')['x1'].agg(lambda x: pd.Series.mode(x)[0]).to_dict()
df1.loc[df1['x1'].isna(), 'x1'] = df1.loc[df1['x1'].isna(), 'id'].map(dict_id_to_x1_mode)

问题场景:处理df2时触发报错

异常DataFrame df2

df2 = pd.DataFrame({'id': [1, 1, 2, 3, 1, 1, 1, 1, 4, 5, 5, 6,np.nan],                    
                   'x1': ['a', np.nan, 'b', 'c', 'e', 'e', 'e', 'f', 'g', 'h', 'j', np.nan, 'k' ]}) 

报错情况

运行原逻辑代码(包括添加dropna=True参数后),会触发ValueError: 0 is not in range错误。尝试修改后的代码仍报错:

dict_id_to_x1_mode = df2.groupby('id')['x1'].agg(lambda x: pd.Series.mode(x, dropna=True)[0]).to_dict() 

解决方案

报错根源是部分id分组的x1列无有效非缺失值(比如id=6的分组,x1仅存在缺失值),此时调用pd.Series.mode()会返回空序列,直接取[0]会触发索引越界错误。以下是两种可行解决方式:

方式1:自定义聚合函数处理空众数

在聚合逻辑中判断众数结果是否为空,为空则指定默认值(如np.nan):

import pandas as pd
import numpy as np

def get_mode_or_default(series, default=np.nan):
    mode_result = series.mode(dropna=True)
    return mode_result.iloc[0] if not mode_result.empty else default

# 生成id到对应众数的映射字典
id_mode_map = df2.groupby('id')['x1'].agg(get_mode_or_default).to_dict()

# 填充x1列的缺失值
df2.loc[df2['x1'].isna(), 'x1'] = df2.loc[df2['x1'].isna(), 'id'].map(id_mode_map)

方式2:用transform一步完成填充

无需手动生成字典,直接通过groupby.transform结合自定义填充逻辑,简化代码:

def fill_with_group_mode(series):
    mode_val = series.mode(dropna=True)
    return series.fillna(mode_val.iloc[0] if not mode_val.empty else np.nan)

df2['x1'] = df2.groupby('id')['x1'].transform(fill_with_group_mode)

补充说明

  • 对于id本身为缺失值的分组(如df2最后一行的id=np.nan),上述代码会正常识别该分组的众数(此分组x1为'k',众数即为'k')。
  • 如果需要给无有效值的分组指定非空默认值,只需修改default参数(例如改为'unknown')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:13:20