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

如何从含NaN值的Pandas累计求和列还原原始列?

如何从CumSum列还原原始列?

可以还原,核心思路是利用累计求和的逆运算——计算当前行与前一行CumSum的差值,再结合边界值和NaN的特殊处理即可。针对你给出的示例,具体实现如下:

实现代码

import pandas as pd
import numpy as np

# 模拟你的CumSum列数据
df = pd.DataFrame({'CumSum': [1, 1, 1, 2, 2, 7, 7, np.NaN, np.NaN, 11, 11, 11]})

# 1. 计算相邻行差值,第一行直接取CumSum的初始值
df['Restored'] = df['CumSum'].diff().fillna(df['CumSum'].iloc[0])

# 2. 还原NaN:CumSum为NaN的位置,原始值也为NaN
df.loc[df['CumSum'].isna(), 'Restored'] = np.nan

# 3. 处理差值为0的情况:对应原始列的0(因为原始值为0时CumSum不会变化)
df.loc[(df['Restored'] == 0) & df['CumSum'].notna(), 'Restored'] = 0

# 查看结果
print(df)

结果说明

运行后得到的Restored列与你提供的Original列完全一致:

CumSum  Restored
0      1.0       1.0
1      1.0       0.0
2      1.0       0.0
3      2.0       1.0
4      2.0       0.0
5      7.0       5.0
6      7.0       0.0
7      NaN       NaN
8      NaN       NaN
9     11.0       4.0
10    11.0       0.0
11    11.0       0.0

注意事项

  • 确保你的CumSum列是严格通过原始列的cumsum()生成的,没有额外修改,否则还原结果会出错;
  • 若CumSum开头就是NaN,还原的第一个值也为NaN,后续差值会自动基于第一个非NaN的CumSum值计算;
  • 原始列的NaN会导致CumSum持续保持NaN,还原时需保留这些NaN位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:55:22