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

基于固定ID与多条件删除Pandas DataFrame行(优先保留ColB)

基于多条件删除DataFrame行(优先保留ColB)

核心思路

针对每个ID分组判断:如果该ID同时存在ColA和ColB记录,仅保留ColB行;如果仅存在ColA记录,则全部保留。

代码实现

先构造示例DataFrame:

import pandas as pd

# 示例输入数据
data = {
    'ID': ['A', 'A', 'B', 'C', 'C', 'C'],
    'Type': ['ColA', 'ColB', 'ColA', 'ColA', 'ColB', 'ColA'],
    'Value': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)

方法1:使用groupby + transform(简洁高效)

# 标记每个ID是否存在ColB记录
df['has_colB'] = df.groupby('ID')['Type'].transform(lambda x: 'ColB' in x.values)

# 过滤行:要么无ColB(保留所有),要么有ColB但Type不是ColA
result = df[(~df['has_colB']) | (df['Type'] != 'ColA')].drop('has_colB', axis=1)

方法2:使用groupby + apply(逻辑直观)

def filter_id_group(group):
    # 若组内存在ColB,仅保留ColB行;否则保留全部
    if 'ColB' in group['Type'].values:
        return group[group['Type'] != 'ColA']
    return group

result = df.groupby('ID').apply(filter_id_group).reset_index(drop=True)

输入输出示例

输入DataFrame:

IDTypeValue
AColA10
AColB20
BColA30
CColA40
CColB50
CColA60

输出结果:

IDTypeValue
AColB20
BColA30
CColB50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:43:23