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

如何在Python的Pandas DataFrame中比较同Id行并删除高Dist行

解决方法

直接用Pandas的分组功能就能搞定,别再遍历行折腾了,效率低还容易出错。

核心思路

对Id分组后,保留每个组里Dist值最小的行(也就是删掉Dist更高的行),两种场景对应不同写法:

场景1:每个Id只保留一行Dist最小的(若有多个相同最小值,取第一行)

用groupby结合idxmin获取每个组内Dist最小的行索引,再筛选:

import pandas as pd

# 构造示例DataFrame(匹配你提到的结构)
df = pd.DataFrame({
    'Id': [1, 1, 2, 2, 2, 3],
    'Dist': [5, 3, 10, 2, 7, 4],
    'OtherCol': ['a', 'b', 'c', 'd', 'e', 'f']
})

# 处理逻辑
result_df = df.loc[df.groupby('Id')['Dist'].idxmin()]

处理后的结果:

IdDistOtherCol
113b
322d
534f

场景2:每个Id保留所有Dist等于组内最小值的行

如果同一个Id下有多行Dist都是最小值,要全部保留,用transform生成每行对应的组内最小值,再筛选:

min_dist_per_id = df.groupby('Id')['Dist'].transform('min')
result_df = df[df['Dist'] == min_dist_per_id]

比如某Id下有两行Dist都是2,这两行都会被保留。

为什么遍历行不可取?

Pandas是为矢量化操作设计的,遍历行(比如for i in df.iterrows())会把数据拆成单行处理,数据量大时速度极慢,而且手动处理分组、索引逻辑很容易出错,比如漏处理分组、重复删行等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:29:56