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

如何在满足分组条件时为DataFrame列填充同组的首个有效值?

按分组填充DataFrame空值解决方案

当前DataFrame

Column AColumn B
1100
1NaN
1NaN
2150
2NaN
2NaN
3NaN
3NaN
460
570
5NaN

期望处理后的DataFrame

Column AColumn B
1100
1100
1100
2150
2150
2150
3NaN
3NaN
460
570
570

实现代码

使用Pandas的groupby结合transform可以实现需求,核心逻辑是按Column A分组后,用每组第一个非NaN值填充组内所有空值,全NaN的分组保持不变:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'Column A': [1,1,1,2,2,2,3,3,4,5,5],
    'Column B': [100, np.nan, np.nan, 150, np.nan, np.nan, np.nan, np.nan, 60, 70, np.nan]
})

# 分组填充逻辑
df['Column B'] = df.groupby('Column A')['Column B'].transform(
    lambda x: x.fillna(x.dropna().iloc[0]) if not x.dropna().empty else x
)

print(df)

代码解释

  • groupby('Column A'):将DataFrame按Column A的取值划分为多个分组
  • transform:保证分组处理后的结果能映射回原DataFrame的每一行,维持原数据结构
  • 匿名函数逻辑:
    1. 先判断分组内是否存在非NaN值(x.dropna().empty)
    2. 若存在,提取第一个非NaN值(x.dropna().iloc[0])并填充组内所有NaN
    3. 若分组内全是NaN,则保持原数据不变

替代写法

也可以通过first_valid_index()获取第一个有效值的索引,实现相同效果:

df['Column B'] = df.groupby('Column A')['Column B'].transform(
    lambda x: x.fillna(x.loc[x.first_valid_index()]) if x.first_valid_index() is not None else x
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:30:46