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

Pandas:仅删除匹配特定条件的重复项需求实现求助

解决方案

可以通过分组判断+筛选的方式实现你的需求,以下是两种可行的Pandas实现方法:

方法1:使用transform标记分组特征

这种方法执行效率较高,适合处理大规模数据:

import pandas as pd

# 假设原始数据存储在df中
# 给每行添加标记,说明其所在的Model Number组是否存在Difference=0.00的记录
df['has_zero_diff'] = df.groupby('Model Number')['Difference'].transform(lambda x: (x == 0.00).any())

# 筛选目标数据:组内有零差异则只留零差异行,否则保留全组
result_df = df[(df['has_zero_diff'] & (df['Difference'] == 0.00)) | ~df['has_zero_diff']]

# 删除临时标记列
result_df = result_df.drop('has_zero_diff', axis=1)

方法2:使用groupby+apply处理每个分组

这种方法逻辑更直观,便于理解分组处理的过程:

import pandas as pd

def process_group(group):
    # 判断当前组是否存在Difference=0.00的行
    if (group['Difference'] == 0.00).any():
        # 存在则只保留这些行
        return group[group['Difference'] == 0.00]
    else:
        # 不存在则保留整个组
        return group

# 对每个分组应用处理函数
result_df = df.groupby('Model Number', group_keys=False).apply(process_group)

注意事项

如果Difference列是浮点数类型,可能存在精度误差(比如实际值为0.0000001但显示为0.00),此时建议用numpy的isclose函数来判断是否接近0.00:

import pandas as pd
import numpy as np

def process_group(group):
    if np.isclose(group['Difference'], 0.00).any():
        return group[np.isclose(group['Difference'], 0.00)]
    else:
        return group

result_df = df.groupby('Model Number', group_keys=False).apply(process_group)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:30:58