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

如何以Pythonic方式在Pandas中对连续整数分组并求和?

优雅解决连续差值分组求和的Pythonic方案

这个需求其实用pandas的矢量化操作就能轻松搞定,完全不用复杂的掩码移位逻辑,代码简洁还高效。咱们一步步来:

首先先还原你的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'some_int': [1, 2, 10, 11, 15],
    'another_int': [5, 6, 7, 8, 9]
})

核心思路

我们的目标是把some_int中连续差值为1的元素归为一组,关键在于识别新分组的起点:当某个元素和前一个元素的差值不等于1时,它就是新分组的第一个元素。利用这个逻辑,我们可以生成分组标签,再用groupby求和。

实现代码

# 生成分组ID:相邻元素差值≠1时标记为新分组,累加得到连续分组号
df['group_id'] = (df['some_int'].diff() != 1).cumsum() - 1  # 减1让分组从0开始

# 按分组ID对another_int求和
sum_result = df.groupby('group_id')['another_int'].sum()

print(sum_result)

运行后输出完全符合你的预期:

group_id
0    11
1    15
2     9
Name: another_int, dtype: int64

代码解释

  • df['some_int'].diff():计算每一行与前一行的差值,第一行因为没有前一行,结果是NaN。
  • (df['some_int'].diff() != 1):把差值不等于1的位置标记为True(包括第一行的NaN,因为NaN != 1会返回True),这些位置就是新分组的起点。
  • .cumsum():对布尔序列累加,True会被当作1,False当作0,这样就能生成连续的分组编号。减1是为了让分组从0开始,和你预期的分组序号一致。
  • 最后用groupby按分组ID求和,一步到位。

这种方法完全利用pandas的内置矢量化操作,没有冗余逻辑,既符合Pythonic的简洁风格,又能保证运行效率,比手动处理掩码要优雅得多~

内容的提问来源于stack exchange,提问作者Luis Enrique Pastrana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:22:34