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

Pandas按分组内非空行值填充同组同列NaN的实现问题

问题原因

你之前的写法错误在于:grp['test_type'].unique() 返回的是长度等于分组数量的聚合结果(本次测试中为3条),直接对该聚合结果调用transform会触发索引对齐错误,最终赋值时出现值错位、大量NaN的异常结果。

高效实现方案

以下方案均为向量化实现,无显式循环,百万级数据处理效率极高:

方案1(最简洁)

利用groupby.transform的first聚合规则,自动跳过NaN取每组首个非空值,适合每组仅存在一个唯一非空值的场景:

df['test_type'] = df.groupby('test_group')['test_type'].transform('first')

方案2(稳定性更高)

显式丢弃每组NaN后取值,不受非空值在组内的位置影响:

df['test_type'] = df.groupby('test_group')['test_type'].transform(lambda x: x.dropna().iat[0])

方案3(性能最优)

预构造分组映射表再赋值,超大数据量下性能优于前两种方案:

# 先提取所有非空的分组-类型映射
type_mapping = df.dropna(subset=['test_type']).set_index('test_group')['test_type'].to_dict()
# 按分组映射填充全列
df['test_type'] = df['test_group'].map(type_mapping)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:45:03