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

Pandas中连续相同A值分组的部分和计算问题

解决连续相邻相同值的分组求和问题

你说得没错,普通的groupby('A')确实会把所有相同A值的行归为一组,不管它们在DataFrame里是不是连续的,这就没法满足你要按连续相邻分组的需求啦。咱们可以通过先创建一个「连续分组标识」的方式来解决这个问题,具体步骤如下:

1. 先构造你的示例DataFrame

首先咱们把你给出的数据转换成可运行的代码:

import pandas as pd

df = pd.DataFrame({
    'A': [1.2, 1.2, 1.2, 2.3, 2.3, 1.2],
    'B': [1, 6, 4, 2, 5, 7]
})

2. 创建连续分组的标识键

核心思路是:当某一行的A值和上一行不同时,就标记为一个新的分组。我们可以用ne()(不等于)结合shift()(上移一行)来判断,再用cumsum()(累加)生成分组编号:

# 生成连续分组的编号,相同连续A值会得到同一个编号
group_key = df['A'].ne(df['A'].shift()).cumsum()

运行后group_key的结果是[1,1,1,2,2,3],完美把连续的相同A值分成了3个组。

3. 按新的分组键求和并整理结果

接下来用这个分组键进行聚合,同时保留每个连续组的起始索引(和你预期的输出索引一致),并对B列求和:

# 分组聚合:取每个组的A值(因为同一组A值相同,取第一个即可),对B列求和
result = df.groupby(group_key).agg(
    A=('A', 'first'),
    B=('B', 'sum')
)

# 把结果的索引替换成每个连续组的起始索引
result = result.set_index(df.groupby(group_key).apply(lambda x: x.index[0]))

最终结果

运行后得到的result就是你想要的:

A   B
0  1.2  11
3  2.3   7
5  1.2   7

这样就完美实现了按连续相邻的相同A值分组求和的需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:00:39