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

如何用Pandas按累计值归零区间分组并设置组标识?

解决方案

直接上步骤和代码,每步说明逻辑:

  1. 计算累计值
    先算出col2的累计和,得到cumvalue列,这是分组的核心依据:
import pandas as pd

# 初始化数据
d = {'col1': [1, 2, 3, 4, 5, 6,7,8], 'col2': [10, 1, -1, -10, 5, 1,-6,5] }
df = pd.DataFrame(d)

# 计算累计值
df['cumvalue'] = df['col2'].cumsum()
  1. 生成分组标识
    我们需要把「累计值从0脱离到再次归零」的行划分为一组,先标记每个组的起始行:
  • 当累计值为0,且下一行累计值不为0时,下一行是新组的起点
  • 第一行如果累计值不为0,直接作为第一个组的起点

然后通过cumsum()生成连续的组号:

# 标记分组起始行
start_rows = (df['cumvalue'] == 0) & (df['cumvalue'].shift(-1) != 0)
# 处理第一行的特殊情况
start_rows.iloc[0] = start_rows.iloc[0] | (df['cumvalue'].iloc[0] != 0)
# 生成组号
df['group'] = start_rows.cumsum()
  1. 统一替换每组col1值
    用groupby结合transform('first'),把每组的col1替换成组内第一行的col1值:
# 替换col1为每组第一个值
df['col1'] = df.groupby('group')['col1'].transform('first')
  1. 整理结果(可选)
    如果不需要group列,可以删掉:
df = df.drop('group', axis=1)

最终输出和期望一致:

col1  col2  cumvalue
0     1    10        10
1     1     1        11
2     1    -1        10
3     1   -10         0
4     2     5         5
5     2     1         6
6     2    -6         0
7     3     5         5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:50:50