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

首次使用Pandas:实现项目累计至0停止及跨行累加需求

Pandas累计求和问题解决方案

嘿,刚接触Pandas就能尝试这种定制化的累计操作,值得点赞!我来帮你搞定这两个需求,咱们一步步拆解:

第一步:先还原你的DataFrame

首先咱们先把你提到的小型DataFrame构建出来,方便后续操作:

import pandas as pd

# 你的原始数据
data = {
    'Date': ['12/10/2017', '12/11/2017', '12/12/2017'],
    'project1': [100, 0, 0],
    'project2': [200, 100, 0],
    'project3': [300, 100, 100]
}
df = pd.DataFrame(data)

需求1:每个项目执行cumsum,遇到0时停止

这里的核心逻辑是:一旦某个项目的某一行出现0,后续所有行的累计值都保持到第一个0之前的累计结果。我们可以通过自定义函数结合apply来实现:

def cumsum_stop_at_zero(series):
    # 找到当前项目列中第一个0的索引
    first_zero_index = series[series == 0].index.min()
    if pd.isna(first_zero_index):
        # 如果列中没有0,直接返回正常的累计求和
        return series.cumsum()
    else:
        # 先计算完整的累计求和
        cumulative_sum = series.cumsum()
        # 把第一个0及之后的所有行,替换成第一个0前一行的累计值
        cumulative_sum.loc[first_zero_index:] = cumulative_sum.loc[first_zero_index - 1]
        return cumulative_sum

# 对所有项目列应用这个函数,保留Date列
project_columns = ['project1', 'project2', 'project3']
df_cumsum_stop = df[['Date']].join(df[project_columns].apply(cumsum_stop_at_zero))

print(df_cumsum_stop)

执行后输出结果:

Date  project1  project2  project3
0  12/10/2017       100       200       300
1  12/11/2017       100       300       400
2  12/12/2017       100       300       500

可以看到:

  • project1在第1行出现0,后续累计值保持100不变
  • project2在第2行出现0,累计值停在300
  • project3没有0,所以正常累计到500

需求2:对所有项目进行跨行(按行)累计求和

这里的跨行累计求和,我理解为从第一行到当前行,所有项目的数值总和的累计。实现起来很简单:

# 先计算每行的所有项目总和
df['row_total'] = df[project_columns].sum(axis=1)
# 再对每行总和执行跨行累计求和
df['cumulative_total'] = df['row_total'].cumsum()

print(df[['Date', 'row_total', 'cumulative_total']])

执行后输出结果:

Date  row_total  cumulative_total
0  12/10/2017        600                600
1  12/11/2017        200                800
2  12/12/2017        100                900

如果需要把每个项目的累计和也整合进去,也可以直接基于需求1的结果,计算每行的累计总和:

df_cumsum_stop['total_cumulative'] = df_cumsum_stop[project_columns].sum(axis=1)
print(df_cumsum_stop)

输出:

Date  project1  project2  project3  total_cumulative
0  12/10/2017       100       200       300               600
1  12/11/2017       100       300       400               800
2  12/12/2017       100       300       500               900

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:56:40