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

Pandas按指定列分组后填充另一列组内空值的方法

Pandas按分组填充指定列空值(非众数填充方案)

问题复现

现有两列结构的Pandas DataFrame,数据构造代码如下:

import pandas as pd
data = [['A', '3ykf'], ['A', '3ykf'], ['A', ], ['B', ], ['B', '6jbk'], ['B', ], ['B', ], ['C', ], ['C', ]]
df = pd.DataFrame(data, columns=['column1', 'column2'])

初始数据形态:

column1column2
A"3ykf"
A空值
A"3ykf"
B空值
B空值
B"6jbk"
B空值
C空值
C空值

填充规则

  • 同一column1分组内,column2的非空值为固定的同一个字符串,其余值为空
  • 组内所有column2空值需要填充为该组对应的唯一非空字符串
  • 禁止使用众数填充逻辑:部分分组(如B组)中空值占比更高,众数为空值,会导致填充结果不符合预期
  • 若分组内column2无任何非空值(如C组),保留原有空值即可

期望填充结果:

column1column2
A"3ykf"
A"3ykf"
A"3ykf"
B"6jbk"
B"6jbk"
B"6jbk"
B"6jbk"
C空值
C空值

实现代码

核心逻辑为按column1分组后,取每组column2的第一个非空值作为填充值,通过groupby+transform映射回原表,完全避开众数计算:

df['column2'] = df.groupby('column1')['column2'].transform(
    lambda x: x.fillna(x.dropna().iloc[0] if len(x.dropna()) > 0 else None)
)

逻辑说明

  • groupby('column1')按指定字段拆分数据分组
  • transform会将分组计算结果按原索引映射回每一行,保证输出和原表长度一致
  • 每组内先丢弃空值:如果存在非空值,取第一个非空值填充组内所有空(根据规则组内非空值完全相同,取第一个即可);如果没有非空值则返回None保留空状态
  • 无众数计算逻辑,不会出现空值占比过高导致填充失效的问题,运行后结果和预期完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:27:38