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

如何在Pandas DataFrame中按前值符号用不同贴现率前向填充NaN

解决代码

你只需要把固定的rate替换为根据前向填充值的符号动态生成的贴现率矩阵即可,修改后的完整代码如下:

import pandas as pd
import numpy as np

# 构造示例数据集
df1 = pd.DataFrame({
                    'Column1':[1.255, 'NaN', 3.558, 'NaN'], 
                    'Column2':[5, 6, 7, 8], 
                    'Column3':[-9, -10, 'NaN', 'NaN'], 
                    'Column4':[13, 15, 'NaN', 'NaN']
                    })
df1 = df1.replace('NaN',np.nan)

# 核心逻辑修改部分
groups = df1.notna().cumsum()
exp = df1.apply(lambda col: col.isna().groupby(groups[col.name]).cumsum())
# 先获取前向填充后的值,用于判断每个位置对应的前值符号
ffill_vals = df1.ffill()
# 按符号生成对应贴现率:正数用0.9,负数用0.7
rate_mat = ffill_vals.applymap(lambda x: 0.9 if x > 0 else 0.7)
# 计算最终结果
df2 = ffill_vals.mul(rate_mat ** exp)

输出结果预览

Column1  Column2  Column3  Column4
0   1.2550      5.0     -9.0    13.00
1   1.1295      6.0    -10.0    15.00
2   3.5580      7.0     -7.0    13.50
3   3.2022      8.0     -4.9    12.15

补充说明

如果你的数据中存在前值为0的情况,可以自行修改rate_mat的判断逻辑,添加0值对应的贴现率规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:15:03