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

如何按ColA分组填充DataFrame的NULL值为组内已有对应值

Pandas 分组填充空值实现方案

针对你需要按ColA分组、仅填充组内空值、保留原有非空行的需求,以下是两种可直接运行的实现:

方案1:通用适配版(适合所有场景)

该方案会取每组每列的第一个非空值作为填充值,仅替换空值,原有非空数据完全保留,也兼容非空值出现在组内任意位置的情况:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'ColA': ['cat','cat','fish','fish','fish','dog','dog','dog','frog','frog','frog','frog'],
    'ColB': [20,28,32,np.nan,np.nan,3,311,755,np.nan,np.nan,400,np.nan],
    'ColC': ['blue','yellow','red',np.nan,np.nan,'black','tan','white',np.nan,np.nan,'green',np.nan]
})

# 核心处理逻辑
df[['ColB', 'ColC']] = df.groupby('ColA')[['ColB', 'ColC']].transform(
    lambda group: group.fillna(group.dropna().iloc[0]) if group.notna().any() else group
)

# 输出结果
print(df)

方案2:高效性能版(适合大数据量场景)

如果你的数据量较大,用前后填充的组合写法性能更高,适配你示例中的所有场景:

df[['ColB', 'ColC']] = df.groupby('ColA')[['ColB', 'ColC']].ffill().bfill()

结果验证

两种方案运行后的输出都和你给出的预期完全一致:

ColA   ColB    ColC
0    cat   20.0    blue
1    cat   28.0  yellow
2   fish   32.0     red
3   fish   32.0     red
4   fish   32.0     red
5    dog    3.0   black
6    dog  311.0     tan
7    dog  755.0   white
8   frog  400.0   green
9   frog  400.0   green
10  frog  400.0   green
11  frog  400.0   green

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:36:02