如何在Python Pandas中基于另外两列值删除DataFrame某列重复项
Pandas按规则对重复ID行进行过滤
示例数据构造
先还原你的DataFrame:
import pandas as pd data = { 'ID': [111, 111, 222, 222, 333, 333], 'TYPE': ['A', 'B', 'B', 'A', 'B', 'A'], 'TG_A': [1, 1, 1, 1, 0, 0], 'TG_B': [0, 0, 0, 0, 1, 1] } df = pd.DataFrame(data)
核心实现逻辑
你需要的规则是:仅当ID重复时,删除满足(TYPE='B'且TG_A=1)或(TYPE='A'且TG_B=1)的行。可以通过构造布尔掩码直接过滤:
# 构造需要删除的行的掩码:同时满足「符合删除条件」和「ID重复」 drop_mask = ( ((df['TYPE'] == 'B') & (df['TG_A'] == 1)) | ((df['TYPE'] == 'A') & (df['TG_B'] == 1)) ) & df.duplicated('ID', keep=False) # 过滤掉需要删除的行 result_df = df[~drop_mask]
验证结果
打印result_df会得到你期望的输出:
ID TYPE TG_A TG_B 0 111 A 1 0 3 222 A 1 0 4 333 B 0 1
如果需要重置索引,可以追加result_df = result_df.reset_index(drop=True)。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

