Python中基于Rank筛选前后行值相同的数据行的问题
解决方案:筛选Rank1和Rank2均为TEST1的ID对应的行
假设你用Pandas处理数据,这里提供两种简洁的实现方式,直接解决你的筛选需求:
方法一:分组验证法
# 1. 提取Rank为1和2的行,聚焦关键判断数据 rank_subset = df[df['Rank'].isin([1, 2])] # 2. 按ID分组,验证两个核心条件:Col2全为TEST1,且同时存在Rank1和Rank2(分组行数为2) valid_ids = rank_subset.groupby('Col1')['Col2'].apply( lambda x: (x == 'TEST1').all() and len(x) == 2 ).reset_index() valid_ids = valid_ids[valid_ids['Col2'] == True]['Col1'].tolist() # 3. 用符合条件的ID过滤原数据集,得到目标结果 result_df = df[df['Col1'].isin(valid_ids)]
方法二:透视表判断法
这种方式更直观,通过透视表直接对比Rank1和Rank2的Col2值:
# 1. 生成透视表,每个ID对应Rank1和Rank2的Col2值 pivot_df = df[df['Rank'].isin([1, 2])].pivot( index='Col1', columns='Rank', values='Col2' ) # 2. 筛选Rank1和Rank2均为TEST1的ID valid_ids = pivot_df[(pivot_df[1] == 'TEST1') & (pivot_df[2] == 'TEST1')].index.tolist() # 3. 过滤原数据得到结果 result_df = df[df['Col1'].isin(valid_ids)]
补充说明
- 如果你只需要保留Rank1和Rank2的行,把最后一步的
df换成rank_subset即可 - 两种方法都能自动检测并筛选出满足「Rank1为TEST1且Rank2也为TEST1」的ID,无需手动指定ID
内容的提问来源于stack exchange,提问作者Rav86
相关产品推荐
相关产品推荐

