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

如何基于col1对应值批量替换col2中的NaN值(大数据集场景)

高效填充分组内缺失值方案

问题场景

你的数据集按col1分组后,每组仅存在一个col2有效值,其余为NaN,需要将组内所有NaN替换为对应组的有效值,且数据集规模庞大(col1含数千种取值)。

示例输入:

col1    col2
a     10       
a     NaN        
a     NaN        
b     19          
b     NaN      
b     NaN 

期望输出:

col1    col2
a     10       
a     10        
a     10       
b     19          
b     19      
b     19

解决方案

以下两种方法均为向量化操作,避免了apply()的逐行低效处理,适合大规模数据集:

方法1:groupby + transform 直接填充

利用groupby分组后,通过transform提取组内唯一有效值并填充缺失值:

import pandas as pd

# 假设你的数据集存储在df中
df['col2'] = df.groupby('col1')['col2'].transform(lambda x: x.fillna(x.first()))

或更简洁的写法:

df['col2'] = df['col2'].fillna(df.groupby('col1')['col2'].transform('first'))

注:因为每组仅一个有效值,first()/last()/max()/min()效果一致,任选其一即可。

方法2:提取有效值后合并填充

先提取每组的有效值,再通过合并方式批量填充:

# 提取每组的唯一有效值(去重避免重复合并)
group_valid_vals = df.dropna(subset=['col2']).drop_duplicates('col1')
# 合并原数据集与有效值表
df = df.merge(group_valid_vals, on='col1', suffixes=('', '_filled'))
# 替换缺失值并清理临时列
df['col2'] = df['col2'].fillna(df['col2_filled'])
df.drop(columns='col2_filled', inplace=True)

这两种方法都能高效处理数千个分组的大数据集,性能远优于apply()逐行处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:56:09