如何用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
相关产品推荐
相关产品推荐

