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

如何用Pandas识别存在A-B-A型变化的分组?

识别分组中存在A-B-A型变化的行(基于VAL1和VAL2列)

我需要从已分组并正确排序的数据中,识别出存在A-B-A型变化的分组。需对比的列为VAL1和VAL2,其值可为数字或字符串。

示例数据说明

  • 分组1的VAL1和VAL2组合全不同(A-B-C型),无需关注;
  • 分组2的VAL1和VAL2组合完全相同(A-A-A型),无需关注;
  • 分组3中第1和第3行的VAL1、VAL2组合相同,中间存在不同组合,属于目标A-B-A型变化,类似A-B-C-B、A-B-C-D-A的变化也需识别。

示例代码

import pandas as pd

df = pd.DataFrame([
     [273,1,'01.01.2016','16.02.2017','23154','1'],
     [273,1,'16.03.2017','31.10.2019','48625','1'],
     [273,1,'01.11.2019','31.12.2099','32007','1'],
     [274,2,'01.01.2016','16.02.2017','23154','1'],
     [274,2,'16.03.2017','31.10.2019','23154','1'],
     [275,3,'01.01.2016','16.02.2017','78945','1'],
     [275,3,'16.03.2017','31.10.2019','48625','2'],
     [275,3,'01.11.2019','31.12.2099','78945','1'],
 ], columns=['ID','GROUP','FROM','UNTIL','VAL1','VAL2'])

期望结果

最终DataFrame仅保留存在A-B-A型变化的分组,示例中仅保留分组3的行。

现有尝试

先通过df['DUPES'] = df.duplicated(subset=['GROUP', 'VAL1', 'VAL2'], keep=False)标记重复组合,后续生成df['DUPES2'] = df['DUPES'] & df['GROUP'].eq(df['GROUP'].shift()) & ~(df['VAL1'].eq(df['VAL1'].shift()) & df['VAL2'].eq(df['VAL2'].shift()))标记非连续重复,但不知如何筛选目标分组,请问如何利用Pandas功能实现需求?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:10:33