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

如何对三角结构Pandas DataFrame计算指定方向的cumprod累乘

实现DataFrame从右向左跳过NaN的累乘

你原有代码未生效的核心原因是:如果未显式指定skipna=True,部分pandas版本遇到NaN值会终止累乘,全部返回NaN;其次默认累乘后会将NaN位置也填充为计算结果,需要保留原DataFrame的NaN位置规则。
完整实现代码如下:

import pandas as pd
import numpy as np

# 构造示例数据
data = [
    [np.nan, np.nan, 2.5, 6.5, np.nan, np.nan],
    [np.nan, 5.32, 6.3, np.nan, np.nan, np.nan],
    [np.nan, 9.4, 5.6, np.nan, np.nan, np.nan],
    [4.5, np.nan, 5.6, np.nan, np.nan, np.nan],
    [np.nan, 6.5, 4.3, np.nan, np.nan, np.nan],
    [5.3, np.nan, np.nan, np.nan, np.nan, np.nan]
]
df1 = pd.DataFrame(data, index=['2016A', '2016B', '2017A', '2018B', '2018C', '2019A'])

# 核心处理逻辑
# 倒序列后做行方向累乘,再把列顺序倒回,显式指定跳过NaN
df_temp = df1.iloc[:, ::-1].cumprod(axis=1, skipna=True).iloc[:, ::-1]
# 仅保留原df中非NaN位置的计算结果,其余位置恢复为NaN
df2 = df_temp.where(df1.notna(), np.nan)

执行后输出的df2和你期望的结果完全匹配,小数精度差异可按需用round()方法调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:27:02