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

Pandas的cumsum()能否将NaN视为0或直接忽略NaN计算累积和?

Pandas DataFrame 累积和处理NaN的两种实现方案

一、将NaN视为0计算累积和

直接对目标列的NaN值填充为0后,调用cumsum()即可,无需额外参数调整:

import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({'target_col': [3, np.nan, 4, np.nan, 2]})

# 将NaN当作0计算累积和
df['cumsum_with_nan_as_0'] = df['target_col'].fillna(0).cumsum()

生成的结果中,原NaN位置的累积和会延续加上0后的数值,示例结果如下:

target_colcumsum_with_nan_as_0
03.03.0
1NaN3.0
24.07.0
3NaN7.0
42.09.0

二、忽略NaN直接计算累积和(不预先填充0)

这里的“忽略NaN”分两种场景:

场景1:仅计算时跳过NaN,结果保留原NaN位置的空值

Pandas的cumsum()默认参数skipna=True就是实现该需求的——计算累积和时会跳过NaN值,但原NaN对应的结果位置仍为NaN,后续非NaN值会继续基于之前的有效累积值计算:

# 保留结果中的NaN,仅计算时忽略NaN
df['cumsum_ignore_nan_keep_null'] = df['target_col'].cumsum()

示例结果:

target_colcumsum_ignore_nan_keep_null
03.03.0
1NaNNaN
24.07.0
3NaNNaN
42.09.0

场景2:计算时跳过NaN,结果延续累积值(不保留空值)

如果希望结果中没有NaN,而是让原NaN位置延续前面的累积和,可以先调用默认的cumsum(),再用ffill()填充结果中的空值:

# 忽略NaN且结果无空值,延续累积和
df['cumsum_ignore_nan_fill'] = df['target_col'].cumsum().ffill()

示例结果:

target_colcumsum_ignore_nan_fill
03.03.0
1NaN3.0
24.07.0
3NaN7.0
42.09.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:22:44