如何正确计算三角结构DataFrame的cumprod(累积乘积)
你原来的代码运行后和原DF一致,核心原因是NaN值的影响:反转列顺序后,每行最左侧的列都是NaN,pandas默认cumprod方法在skipna=True参数下,遇到NaN会跳过,直到第一个非NaN值才开始计算累乘,最终计算结果刚好落在原DF的NaN位置,非NaN位置数值没有变化,所以看起来和原数据完全一致。
可以先临时将NaN替换为不影响累乘结果的1,计算完成后再把原DF中是NaN的位置复原即可,正确代码如下:
import pandas as pd import numpy as np # 示例数据构造 df1 = pd.DataFrame({ '12-24': [1.554, 2.978, 4.366], '24-36': [3.532, 1.114, np.nan], '36-48': [8.657, np.nan, np.nan] }, index=[2017, 2018, 2019]) # 计算逻辑 df_temp = df1.fillna(1) df2 = df_temp.iloc[:, ::-1].cumprod(axis=1).iloc[:, ::-1] # 复原原NaN位置,保留三位小数对齐格式 df2 = df2.where(df1.notna(), np.nan).round(3)
内容的提问来源于stack exchange,提问作者Michael Scofield
相关产品推荐
相关产品推荐

