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

基于排序DataFrame的weather列众数插补:NA填充、非众数替换及平局处理

Pandas实现分组Weather列的特殊众数插补

需求回顾

对已按schoolid、grade、date、time_of_day排序的DataFrame stack_2,生成新列weather_mode_imputed:

  • 若分组内weather有唯一众数:将组内所有值(包括NA和非众数)替换为该众数
  • 若分组内存在多个众数(平局):组内新列全部设为NA
  • 保留原数据排序

代码实现

首先导入依赖:

import pandas as pd
import numpy as np

定义分组处理函数:

def process_weather_mode(group):
    # 统计分组内各weather值的出现频次
    freq = group['weather'].value_counts()
    max_freq = freq.max()
    # 筛选出所有达到最高频次的众数
    top_values = freq[freq == max_freq].index.tolist()
    
    if len(top_values) == 1:
        # 唯一众数,全组替换为该值
        group['weather_mode_imputed'] = top_values[0]
    else:
        # 多众数情况,全组设为NA
        group['weather_mode_imputed'] = np.nan
    return group

应用到目标DataFrame:

# 按指定列分组处理,group_keys=False避免分组键干扰原结构
stack_2_imputed = stack_2.groupby(
    ['schoolid', 'grade', 'date', 'time_of_day'],
    group_keys=False
).apply(process_weather_mode)

# 确保排序与原数据完全一致(若分组后索引变动,执行此步骤)
stack_2_imputed = stack_2_imputed.sort_index()

关键说明

  1. 众数判断逻辑:通过value_counts()直接获取频次,比mode()更直观判断是否存在多个众数(mode()返回所有众数,但需额外处理长度)
  2. 排序保留:原数据已按分组键排序,groupby结合group_keys=False处理后,结果会保留原索引;若索引被打乱,sort_index()可快速恢复原排序
  3. NA处理:唯一众数场景下,原NA值会自动被替换为众数,无需额外填充操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:25:17