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

如何在Pandas中基于acc_count分组中位数填充avg_spd空值?

用Pandas按分组中位数填充空值的解决方案

嘿,我来帮你搞定这个问题!你已经算出了每个acc_count对应的avg_spd中位数,现在要把原DataFrame里的空值按对应分组填充对吧?这里有两种简单好用的方法:

先回顾下你的分组结果

你用这段代码得到了分组中位数:

df.groupby('acc_count', as_index=False)['avg_spd'].median()

结果是:

acc_countavg_spd
020.94
124.42
226.035
333.27
433.46
536.07
635.03
733.49
871.85

方法一:一步到位用groupby.transform

这是最省心的方法,不需要额外存中间结果,直接生成填充值并替换空值:

# 为每个acc_count分组生成对应中位数的填充序列
median_fill_values = df.groupby('acc_count')['avg_spd'].transform('median')

# 填充avg_spd的空值
df['avg_spd'] = df['avg_spd'].fillna(median_fill_values)

为什么这个好用?因为transform('median')会把每个分组的中位数自动匹配到原DataFrame的每一行,生成和原表一样长的Series,fillna直接就能用它替换空值,完全不用手动对应。


方法二:用字典映射填充(适合已经有分组结果的情况)

如果你已经把之前的分组结果存成了DataFrame(比如叫median_df),可以转成字典再填充:

# 假设你已经保存了分组结果到median_df
median_df = df.groupby('acc_count', as_index=False)['avg_spd'].median()

# 把分组结果转成 {acc_count: 对应中位数} 的字典
median_mapping = median_df.set_index('acc_count')['avg_spd'].to_dict()

# 用map匹配每个行的acc_count对应的中位数,然后填充空值
df['avg_spd'] = df['avg_spd'].fillna(df['acc_count'].map(median_mapping))

这种方法的好处是,如果你之后还要重复用这些中位数,字典可以直接复用,不用再重新分组计算。


检查填充效果

最后可以用这句代码确认空值都被处理了:

print(df['avg_spd'].isnull().sum())

如果输出是0,就说明所有空值都按要求填充完成啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:32:55