如何获取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
相关产品推荐
相关产品推荐

