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

如何获取DataFrame中指定列最小值对应的首行?含差值列场景

解决DataFrame获取差值列最小值对应行的问题

我来帮你搞定这个问题!你之前的代码出错主要是因为找最小值对应行的方式不对——df.iloc[df[6].min()]这里有两个问题:一是列名写错了(你生成的差值列是4不是6),二是min()返回的是差值的数值(比如你的例子里是7),而iloc需要的是行的位置索引,用数值7去索引肯定会越界报错。

下面给你几种更靠谱的方法,结合你的需求来选:

第一步:正确生成差值列

先把差值列生成好,其实不用单独切分df2,直接在原DataFrame操作更简洁:

import pandas as pd
import numpy as np

# 还原你的DataFrame
df = pd.DataFrame({
    2: [-111, -130, -105, -118, -147, 225, 102],
    3: [-104, 110, -112, -100, 123, -278, -122]
})

# 生成绝对差值列(两种写法都可以)
df[4] = np.abs(df[2] - df[3])
# 或者用pandas自带的abs方法:df[4] = df[2].sub(df[3]).abs()

第二步:获取目标行

情况1:获取所有差值最小的行

你的例子里索引0和2的差值都是7(最小值),如果想把这些行都拿出来:

min_diff_rows = df[df[4] == df[4].min()]
print(min_diff_rows)

输出会是:

2    3  4
0 -111 -104  7
2 -105 -112  7

情况2:获取你想要的第二小的行(索引2)

如果明确要取最小值中的第二行,或者说取第n小的行,可以用nsmallest()方法:

# 取差值最小的2行,然后取最后一行(就是你要的索引2)
target_row = df.nsmallest(2, 4).iloc[-1]
print(target_row)

输出就是:

2   -105
3   -112
4      7
Name: 2, dtype: int64

情况3:获取第一个最小值对应的行

如果只需要第一个出现的最小值行(索引0),可以用idxmin()拿到索引再取行:

first_min_row = df.loc[df[4].idxmin()]
print(first_min_row)

这些方法都能精准定位到你需要的行,比你之前的写法更稳妥哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:07:46