Pandas:分组下按配对两端2和4的存在规则筛选数据的问题
Pandas 实现代码
首先导入依赖并构造测试数据集:
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'Group': [1,1,1,1,2,2,2,2,2,2,2], 'Code': [2,2,4,1,4,1,2,3,1,1,3] })
核心筛选逻辑
- 按
Group分组后生成每行的下一行Code值,用于组成连续配对 - 判断配对是否符合保留条件:配对的两个值恰好有一个属于
{2,4}(完全匹配示例中的保留规则) - 标记需要保留的行:只要行属于任意一个符合条件的配对(即作为配对的第一个元素或第二个元素)就保留
# 生成分组内下一行的Code值 df['next_code'] = df.groupby('Group')['Code'].shift(-1) # 判断当前行与下一行组成的配对是否符合保留条件 df['valid_pair'] = (df['Code'].isin([2,4])) ^ (df['next_code'].isin([2,4])) # 标记所有需要保留的行:当前配对有效 或 上一个配对有效 df['keep'] = df.groupby('Group')['valid_pair'].apply(lambda x: x | x.shift(fill_value=False)) # 过滤结果并删除辅助列 result = df[df['keep']][['Group', 'Code']].reset_index(drop=True)
输出结果
运行后result的内容和预期完全一致:
Group Code 0 1 4 1 1 1 2 2 4 3 2 1 4 2 2 5 2 3
内容的提问来源于stack exchange,提问作者tj judge
相关产品推荐
相关产品推荐

