在pandas DataFrame中查找最接近值的第一行索引

芝士

所以我有一个包含多个列的数据框。对于每一列,我想获得第一行的索引,该索引几乎等于用户指定的数字(例如,期望数字的0.05以内)。数据框看起来像这样:

ix   col1   col2   col3
0    nan    0.2    1.04
1    0.98   nan    1.5
2    1.7    1.03   1.91
3    1.02   1.42   0.97

假设我希望第一行几乎等于1.0,我希望结果是:

  • col1的索引1(即使在数学上均相等于1.0,也不是索引3)
  • col2的索引2
  • col3的索引0(即使0.97比1.04更接近1,也不是索引3)

我尝试了一种使用argsort()的方法:

df.iloc[(df.col1-1.0).abs().argsort()[:1]]

根据其他主题,这将为我提供col1中行的索引,其值最接近1.0。但是,它仅返回充满nan的数据帧。我还可以想象这种方法不会使第一个值接近每列遇到的1,而是最接近1的值。

谁能帮我这个?

耶斯列尔

使用DataFrame.sub的差异,转换为绝对值通过abs,通过比较lt<)和第一个值的最后一个GET指数DataFrame.idxmax

a = df.sub(1).abs().lt(0.05).idxmax()
print (a)
col1    1
col2    2
col3    0
dtype: int64

但是,对于更通用的解决方案,如果将失败的布尔掩码(容忍度中没有值)附加到由Trues填充的新列(名称为),则可以工作NaN

print (df)
    col1  col2  col3
ix                  
0    NaN  0.20  1.07
1   0.98   NaN  1.50
2   1.70  1.03  1.91
3   1.02  1.42  0.87

s = pd.Series([True] * len(df.columns), index=df.columns, name=np.nan)
a = df.sub(1).abs().lt(0.05).append(s).idxmax()
print (a)
col1    1.0
col2    2.0
col3    NaN
dtype: float64

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在每一行中查找最接近的列值-Pandas

Pandas.DataFrame:查找行的索引,该行的索引在给定列中的值最接近(但低于)指定值

在Pandas DataFrame的不同列中查找最接近的先前值

如何在Pandas DataFrame中获得最小值不为零的第一行索引?

Pandas 在多列中的一行中查找特定值的第一次出现并返回列索引

通过最接近的索引连接pandas DataFrame值

如何获得Pandas中一行的相等或最接近的值?

如何在Pandas Dataframe中获取最接近另一个值的值

查找与Pandas DataFrame Avg最接近的列

在具有多列的 Pandas DataFrame 中选择最接近零的行中的值

替换 pandas DataFrame 每一行中第一次出现的值

如果連續 nan 的數量達到給定列的閾值 N,則在 Pandas 數據框中查找 nan 值的第一行和最後一行索引?

在Pandas数据框中查找单个文件的第一行和最后一行

在 Pandas Dataframe 中查找非唯一行

在 Pandas 中寻找最接近的值

pandas.DataFrame.rolling根据ID和时间索引将当前行值和接下来的2行值相加,得出第一行的值

在pandas DataFrame中查找重复行的索引

比较Pandas DataFrame中的上一行值

Pandas 数据框 - 尝试在数组中查找最接近的值

每组第一行的R pandas groupby索引

根據另一行的值是否已被索引,在 Pandas 中設置行索引

在另一列的列表中查找pandas数据框列的最接近元素

在DataFrame Pandas中将第二行中的列分类为第一行?

pandas - 查找一行中相等值的批次之間的索引距離

Pandas Dataframe to CSV 只获取第一行

Pandas DataFrame:如何按组中的第一行和最后一行计算差异?

Python / Pandas在一列中找到最接近/最接近的值

在pandas DataFrame的每一列中查找第一个非零值

删除特定值之前的第一行-Pandas