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
相关产品推荐
相关产品推荐

