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

Pandas使用ffill填充缺失值并新增带备注说明列的实现方法

实现步骤

  1. 先统一Cost列的缺失值格式:将空字符串转为NaN,同时把Cost列转为数值类型,方便后续计算
  2. 按Product字段分组,对Cost列执行前向填充(ffill)
  3. 新增辅助列记录有效成本对应的日期,同样按分组前向填充,以此生成Cost_Assumption标记列
  4. 可选:将Cost列保留两位小数,匹配预期输出格式
import pandas as pd
import numpy as np

# 构造示例数据
df_1 = pd.DataFrame([['2021-01-01', 'Supp_1', 'Product_1', 1],
                       ['2021-02-01', 'Supp_1', 'Product_1', ''],
                       ['2021-03-01','Supp_1', 'Product_1', np.nan],
                       ['2021-04-01', 'Supp_1', 'Product_1', 1.25],
              ['2021-01-01', 'Supp_1', 'Product_2', 1.5],
                       ['2021-02-01', 'Supp_1', 'Product_2', ''],
                       ['2021-03-01','Supp_1', 'Product_2', np.nan],
                       ['2021-04-01', 'Supp_1', 'Product_2', 1.75]],
                      columns=['Date','Supplier','Product','Cost'])

# 1. 统一缺失值为NaN,转换Cost为数值类型
df_1['Cost'] = pd.to_numeric(df_1['Cost'], errors='coerce')

# 2. 按产品分组处理
df_2 = df_1.groupby('Product', group_keys=False).apply(lambda x: x.assign(
    # 前向填充Cost列
    Cost = x['Cost'].ffill(),
    # 记录有效成本的来源日期
    source_date = np.where(x['Cost'].notna(), x['Date'], pd.NA)
).ffill(subset=['source_date']))

# 3. 生成Cost_Assumption标记列
df_2['Cost_Assumption'] = np.where(df_2['Date'] == df_2['source_date'],
                                   'Actual',
                                   'Cost per ' + df_2['source_date'])

# 4. 格式化Cost列,删除辅助列
df_2['Cost'] = df_2['Cost'].round(2)
df_2 = df_2.drop(columns=['source_date'])

# 输出结果
print(df_2)

运行上述代码得到的输出和预期的df_2完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:45:02