如何在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
相关产品推荐
相关产品推荐

