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

如何利用同比变化逆运算填充DataFrame中的NaN值?

解决方案

步骤1:转换Factor列为数值类型

首先需要将Factor列的百分比字符串(如5%)转换为浮点小数(如0.05),方便后续计算:

import pandas as pd

# 假设你的DataFrame已按日期索引加载完成
df['Factor'] = df['Factor'].str.replace('%', '').astype(float) / 100

步骤2:按年份层级填充缺失值

缺失值的计算依赖上一年同月的已填充值,可分年份依次处理:

  • 2023年缺失值:用2022年同月原始值乘以(1 + 对应月份的Factor)
  • 2024年缺失值:用2023年已计算完成的同月值乘以(1 + 对应月份的Factor)
# 填充2023年数据
df.loc['2023-01-31':'2023-12-31', 'Value Col'] = (
    df.loc['2022-01-31':'2022-12-31', 'Value Col'].values 
    * (1 + df.loc['2023-01-31':'2023-12-31', 'Factor'])
)

# 填充2024年数据
df.loc['2024-01-31':'2024-12-31', 'Value Col'] = (
    df.loc['2023-01-31':'2023-12-31', 'Value Col'].values 
    * (1 + df.loc['2024-01-31':'2024-12-31', 'Factor'])
)

通用批量处理方式(适配更多年份)

如果数据包含更多年份,可通过提取月份分组,利用shift自动获取上一年同月的值,无需手动指定年份范围:

# 提取月份作为分组键
df['month'] = df.index.month

# 按月份分组,递推填充每组内的缺失值
df['Value Col'] = df.groupby('month').apply(
    lambda group: group['Value Col'].fillna(
        group['Value Col'].shift(1) * (1 + group['Factor'])
    )
).reset_index(level=0, drop=True)

# 删除临时生成的month列
df.drop('month', axis=1, inplace=True)

结果验证

以你提到的2023-04-30为例,计算后的值为:0.018 * (1 + 0.04) = 0.01872,与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:52:51