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

如何提升DataFrame循环遍历条件筛选追加列表的效率

重叠兴趣点位数据去重需求
  • 数据规模:约4万行、52列的Pandas DataFrame,存储存在重叠情况的兴趣点位数据
  • 去重规则:过滤重叠的点位记录,仅保留每组匹配条目的最后一条
  • 示例数据集:
    示例数据集
  • 预期输出结果:
    预期输出结果

规则示例:第一条Track A的条目属于重叠记录,需要被排除。

现有实现代码
df_length = len(df.axes[0])
duplicate_flag = False
i = 0
trim_value = 0.005
data = []

for j in range(df_length - 1):
    for k in range(df_length - 1):
        if k >= i:
            if(df.at[i, 'Track'] == df.at[k+1, 'Track'] and
             df.at[i, 'Asset Name'] == df.at[k+1, 'Asset Name'] and
             df.at[i, 'Type'] == df.at[k+1, 'Type'] and
             df.at[i, 'Location From'] >= (df.at[k+1, 'Location From'] - trim_value) and
             df.at[i, 'Location From'] <= (df.at[k+1, 'Location From'] + trim_value) and
             df.at[i, 'Location To'] >= (df.at[k+1, 'Location To'] - trim_value) and
             df.at[i, 'Location To'] <= (df.at[k+1, 'Location To'] + trim_value)):
                duplicate_flag = True
       
    if duplicate_flag == False:
        data.append(df.iloc[i])
        
    i += 1    
    duplicate_flag = False

data.append(df.iloc[-1])
df2 = pd.DataFrame(data)
现有代码逻辑

代码采用逐行双层遍历的方式实现去重:

  1. 取当前行,和它下方所有行逐一对比
  2. 判定为重复的条件:
    • Track、Asset Name、Type三个字段值完全相等
    • Location From、Location To两个字段和对比行对应字段的差值在trim_value=0.005的容差范围内
  3. 如果当前行和下方任意一行满足重复条件,就标记当前行为重复行,不保留
  4. 如果当前行和下方所有行都不满足重复条件,就将当前行追加到结果列表中
  5. 遍历完成后手动追加最后一行,将结果列表转为新的DataFrame
现存问题

当前代码处理4万行数据时运行耗时极长。虽然已经采用了向列表追加元素而非直接操作DataFrame的优化手段,但性能仍达不到可用标准,需要定位性能瓶颈并获取可落地的优化方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:27:25