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

如何加速含fillna、grouping、transform的缺失值填充函数?

优化按时间维度填充缺失值的函数

原函数性能瓶颈分析

原函数依赖lambda和x.apply(function)触发大量逐元素的Python层面操作,加上多次分组与重复填充,导致运行效率低下。以下是基于pandas向量化操作的优化方案,全程避免Python循环和条件语句。

优化后的代码

import pandas as pd

def fillna_date_optimized(data, function='mean'):
    # 映射聚合函数到pandas内置向量化方法
    agg_func_map = {
        'mean': pd.Series.mean,
        'max': pd.Series.max,
        'min': pd.Series.min,
        'median': pd.Series.median
    }
    agg_func = agg_func_map[function]
    
    d = data.copy()
    d.index = pd.to_datetime(d.index)
    
    # 计算各维度聚合值并匹配到原数据行
    monthly_agg = d.groupby([d.index.year, d.index.month]).transform(agg_func)
    yearly_agg = d.groupby(d.index.year).transform(agg_func)
    col_agg = d.apply(agg_func).reindex(d.index).ffill()
    
    # 按优先级填充:月度→年度→整列
    filled_data = d.combine_first(monthly_agg).combine_first(yearly_agg).combine_first(col_agg)
    return filled_data

优化说明

  1. 向量化聚合替代Python层面操作:通过预定义函数映射,直接调用pandas内置的向量化聚合方法,彻底避免lambda和apply带来的性能损耗。
  2. 合并填充逻辑:用combine_first按优先级依次填充,替代原函数多次fillna的重复操作,减少数据复制与中间变量生成。
  3. 高效索引对齐:利用transform直接将分组聚合值匹配到原数据对应行,无需额外手动对齐索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:43:02