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

pandas DataFrame列浮点0值如何按客户分组先后向前、向后填充?

实现代码及说明

你可以按照以下逻辑处理,核心是先将0值转为空值,再分组执行先后填充,最后处理全为空的特殊情况:

import pandas as pd

# 测试数据生成
df = pd.DataFrame({"CLIENT_ID": [16081, 16081, 16081, 16081, 20011, 20011, 20011, 20011, 20011,20020],
                   "ENCOUNTER_DATE": ['2018-12-17', '2019-03-19', '2019-04-18', '2019-06-07', '2020-02-27', '2020-03-27', '2020-04-27', '2020-06-07', '2020-07-07','2020-01-01'],
                   "WEIGHT_KG": [70, 0, 0, 0, 0, 0, 57, 0, 60,0]})

# 核心处理逻辑
# 第一步:将0值替换为空值,适配pandas填充方法的处理规则
df['WEIGHT_KG'] = df['WEIGHT_KG'].replace(0, pd.NA)
# 第二步:按客户ID分组,先后执行向前填充、向后填充
df['WEIGHT_KG'] = df.groupby('CLIENT_ID')['WEIGHT_KG'].transform(lambda x: x.ffill().bfill())
# 第三步:处理无有效体重值的客户,剩余空值回填为0
df['WEIGHT_KG'] = df['WEIGHT_KG'].fillna(0)

处理后的结果和你给出的预期输出完全一致。

逻辑说明

  • 向前填充(ffill):用该客户上一次就诊的有效体重填充本次的0值,适配首次就诊有体重、后续多次录错为0的场景
  • 向后填充(bfill):用该客户下一次就诊的有效体重填充本次的0值,适配前几次就诊录错为0、后续首次录入有效体重的场景
  • 最终空值回填0:针对该客户所有就诊记录都没有有效体重的场景,保留原始0值不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:06:03