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

如何在Pandas中对连续后续分组对执行计算?

解决方法:提取连续set_id对的子DataFrame

针对你的问题,核心是要识别出set_id连续递增1的配对(比如(0,1)、(4,5)、(5,6)),同时处理set_id=5属于两个配对的特殊情况。下面是基于Pandas的分步解决方案:

步骤1:初始化原始数据

先确认我们的初始DataFrame:

import pandas as pd

df = pd.DataFrame(
    {'set_id': [0, 0,1,1,4,4,5,5,6,6], 
     'data': [-27, -45,-52,-65,-37, 20, 17, -45, -44, 15]}
)

步骤2:识别连续的set_id配对

首先提取去重后的set_id序列,然后筛选出满足「后一个set_id = 当前set_id +1」的有效配对:

# 获取去重后的set_id序列
unique_sets = df['set_id'].unique()

# 筛选连续递增1的set_id对
continuous_pairs = [
    (unique_sets[i], unique_sets[i+1]) 
    for i in range(len(unique_sets)-1) 
    if unique_sets[i+1] == unique_sets[i] + 1
]
# 输出结果:[(0, 1), (4, 5), (5, 6)]

步骤3:提取每个连续对对应的子DataFrame

我们可以把每个连续对的子DataFrame存入列表,方便后续对每个配对单独执行计算:

# 生成每个连续对的子DataFrame列表
continuous_dfs = [df[df['set_id'].isin(pair)] for pair in continuous_pairs]

现在continuous_dfs里包含三个子DataFrame:

  • 第一个对应set_id=(0,1)的所有行
  • 第二个对应set_id=(4,5)的所有行
  • 第三个对应set_id=(5,6)的所有行

可选:合并所有连续对的行(含重复的set_id=5行)

如果需要把这些子DataFrame合并成一个整体,可以用pd.concat:

combined_df = pd.concat(continuous_dfs, ignore_index=True)

可选:仅筛选属于连续对的set_id(无重复行)

如果你只需要保留所有属于连续配对的set_id的行(不需要重复显示set_id=5的行),可以先收集所有有效set_id再筛选:

# 收集所有在连续配对中的set_id
valid_set_ids = {s for pair in continuous_pairs for s in pair}
filtered_df = df[df['set_id'].isin(valid_set_ids)]

这个方案完全基于Pandas原生操作,不需要额外的分组标记,完美处理了set_id属于多个连续配对的情况,后续你可以直接遍历continuous_dfs对每个连续配对执行你的系列计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:00:21