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

如何用Pandas基于Factor列差值逐行填充DataFrame的NaN值?

问题:用Pandas矢量化方法填充DataFrame的NaN值

我有一个包含NaN值的DataFrame,希望通过将前一行的Value Col值与Factor列的变化值(绝对值)相加来填充NaN。初始DataFrame如下:

Value Col    Factor
2022-11-30  0.020       84
2022-12-31  0.015       77
2023-01-31  NaN         90
2023-02-28  NaN         44
2023-03-31  NaN         39

填充规则示例:

  • 填充df.iloc[2, 0]时,取df.iloc[1,0]与Factor列的差值绝对值(90-77=13)相加,得到0.015+13=13.015
  • 后续行以此类推,最终预期输出如下:
Value Col    Factor
2022-11-30  0.020       84
2022-12-31  0.015       77
2023-01-31  13.015      90
2023-02-28  59.015      44
2023-03-31  64.015      39

我已用for loop实现该需求,但想找到基于Pandas函数的逐行填充方法,目前已通过df['Factor'].diff(1)获取Factor列差值,却不知如何以此逐行填充NaN。


解决方案

你可以通过计算差值累加序列结合fillna()实现矢量化填充,无需循环,步骤如下:

1. 构建示例DataFrame

import pandas as pd

# 创建初始DataFrame
df = pd.DataFrame({
    'Value Col': [0.020, 0.015, None, None, None],
    'Factor': [84, 77, 90, 44, 39]
}, index=pd.to_datetime(['2022-11-30', '2022-12-31', '2023-01-31', '2023-02-28', '2023-03-31']))

2. 定位最后一个非NaN值的位置

找到Value Col中最后一个有有效值的行,以此作为填充的起始基准:

last_valid_idx = df['Value Col'].last_valid_index()

3. 计算Factor列的差值绝对值并累加

从基准行开始,计算Factor列的相邻差值绝对值,再做累加:

# 计算基准行及之后的Factor差值绝对值
factor_diff_after = df.loc[last_valid_idx:, 'Factor'].diff().abs()

# 累加差值,再加上基准行的Value值,得到填充序列
fill_series = df.loc[last_valid_idx, 'Value Col'] + factor_diff_after.cumsum()

4. 填充NaN值

用生成的填充序列替换Value Col中的NaN:

df['Value Col'] = df['Value Col'].fillna(fill_series)

运行后即可得到预期的结果:

Value Col  Factor
2022-11-30      0.020      84
2022-12-31      0.015      77
2023-01-31     13.015      90
2023-02-28     59.015      44
2023-03-31     64.015      39

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:22:02