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
相关产品推荐
相关产品推荐

