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

如何在Pandas中移除满足特定分组条件的数据行?

Pandas 实现方案

问题回顾

给定如下原始数据:

RefNorest1Pairrest2
A11A11
B22E55
C33C22
C33F66
D44D44
D44G77
D44H88

需要按RefNo分组后,移除同时满足以下两个条件的行:

  • 该行的RefNo与Pair值相等
  • 该分组内Pair字段的唯一值数量为1

代码实现

import pandas as pd

# 构造原始数据
data = {
    'RefNo': ['A', 'B', 'C', 'C', 'D', 'D', 'D'],
    'rest1': [11, 22, 33, 33, 44, 44, 44],
    'Pair': ['A', 'E', 'C', 'F', 'D', 'G', 'H'],
    'rest2': [11, 55, 22, 66, 44, 77, 88]
}
df = pd.DataFrame(data)

# 1. 计算每个RefNo分组内Pair的唯一值数量,添加为临时列
df['pair_unique_count'] = df.groupby('RefNo')['Pair'].transform('nunique')

# 2. 筛选保留符合要求的行,移除临时列
filtered_df = df[~((df['RefNo'] == df['Pair']) & (df['pair_unique_count'] == 1))].drop(columns='pair_unique_count')

print(filtered_df)

代码说明

  • groupby('RefNo')['Pair'].transform('nunique'):对每个RefNo分组统计Pair的唯一值数量,通过transform将结果映射回原数据的每一行,保证行数与原数据一致。
  • 筛选条件~((df['RefNo'] == df['Pair']) & (df['pair_unique_count'] == 1)):取反同时满足两个删除条件的行,保留所有不符合删除规则的数据。
  • drop(columns='pair_unique_count'):移除临时添加的辅助列,得到最终的目标数据。

输出结果

运行代码后将得到预期结果:

RefNorest1Pairrest2
B22E55
C33C22
C33F66
D44D44
D44G77
D44H88

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:23:09