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

如何基于其他列百分比变化填充DataFrame中的连续NaN值

问题:利用列C的百分比变化值填充列B的连续NaN值

单个NaN的填充场景

当列B仅存在一个NaN值时,可通过列C的百分比变化值替换该NaN:

创建示例DataFrame:

import pandas as pd
import numpy as np

df_stack = pd.DataFrame({'A': [2, 4, 8, 0,6],
                         'B': [2, 4, np.NaN, 5,7],
                         'C': [10, 2, 1, 8,9]},
                        index=['1', '2', '3', '4', '5'])

原始数据:

ABC
122.010
244.02
38NaN1
405.08
567.09

使用以下代码可完成填充:

df_stack['B'] = df_stack['B'].fillna(
    (
        df_stack['C'] /
        df_stack['C'].shift(1)
    ) * df_stack['B'].shift(1)
)

填充后结果:

ABC
122.010
244.02
382.01
405.08
567.09

连续NaN的填充问题

当列B存在两个及以上连续NaN值时,上述方法仅能填充第一个NaN,剩余NaN会被保留:

创建带连续NaN的DataFrame:

df_stack = pd.DataFrame({'A': [2, 4, 8, 0,6],
                         'B': [2, 4, np.NaN, np.NaN ,7],
                         'C': [10, 2, 1, 8,9]},
                        index=['1', '2', '3', '4', '5'])

用上述代码填充后的结果:

ABC
122.010
244.02
382.01
40NaN8
567.09

预期需求

需要一种无需循环的方法,逐行(从上到下)完成连续NaN的填充,得到如下预期输出:

ABC
122.010
244.02
382.01
4016.08
567.09

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:55:39