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

基于筛选条件删除重复originalIndex行的Pandas性能优化需求

Pandas高效处理重复组内保留最小差值行的优化方案

核心优化思路

放弃Python循环,利用Pandas的向量化运算和分组聚合能力——这类底层基于C实现的操作,速度远快于逐组的Python循环。

方案一:排序后分组取首行

先计算A与B的绝对值差,再按originalIndex分组,每组内按差值升序排序后取第一行:

# 计算差值列
df['Diff'] = abs(df['A'] - df['B'])
# 按组排序并保留每组最小差值的行
result = df.sort_values(['originalIndex', 'Diff']).groupby('originalIndex').first().reset_index()
# 移除临时差值列(可选)
result = result.drop('Diff', axis=1)

方案二:用transform筛选最小差值行

通过transform获取每组的最小差值,直接筛选符合条件的行:

# 计算差值列
df['Diff'] = abs(df['A'] - df['B'])
# 生成每组的最小差值映射
min_diff = df.groupby('originalIndex')['Diff'].transform('min')
# 筛选出等于组内最小差值的行,若有重复仅保留第一个
result = df[df['Diff'] == min_diff].drop_duplicates('originalIndex')
# 移除临时差值列(可选)
result = result.drop('Diff', axis=1)

原循环方案的问题

原代码的性能瓶颈在于:

  • 逐组切片生成临时DataFrame,频繁的内存操作拖慢速度
  • apply(lambda x: ...)是逐行的Python层面运算,效率远低于向量化计算
  • 数据量越大,循环的开销呈线性增长,性能瓶颈会愈发明显

注意事项

如果同一originalIndex组内存在多行差值相同且均为最小值的情况:

  • 上述两种方案默认保留第一个出现的行
  • 若需保留所有最小差值行,去掉drop_duplicates('originalIndex')即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:21