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

Pandas用Groupby分组均值替换'tbd'且不影响原有NaN值

解法

你可以直接在transform的匿名函数里用条件替换逻辑,仅针对值为'tbd'的项做填充,原有数值和NaN会完全保留:

直接使用replace的写法(符合你的需求)

import pandas as pd

df['col_b'] = df.groupby(['col_a', 'col_c'])['col_b'].transform(
    lambda x: x.replace('tbd', x[x != 'tbd'].astype(float).round().mean())
)

逻辑说明

  • x[x != 'tbd'] 取出分组内所有非'tbd'的有效值计算均值,自动跳过'tbd'和原有NaN
  • 仅对值等于'tbd'的项做替换,其他值(包括原有NaN)完全不修改
  • 如果分组内不存在有效数值(全为'tbd'),你可以额外加判断处理特殊场景,示例:
df['col_b'] = df.groupby(['col_a', 'col_c'])['col_b'].transform(
    lambda x: x.replace('tbd', x[x != 'tbd'].astype(float).round().mean()) if len(x[x != 'tbd']) >0 else x
)

另一种更高效的where写法

也可以用where方法实现相同逻辑,性能略优于逐值replace:

df['col_b'] = df.groupby(['col_a', 'col_c'])['col_b'].transform(
    lambda x: x.where(x != 'tbd', pd.to_numeric(x, errors='coerce').round().mean())
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:06:02