记录最小绝对偏差,但包括其符号

Recording the minimum absolute deviation, but including its sign

我有一个 pandas df,格式如下:

第一次偏差 秒偏差 最接近的偏差 偏差最小的列名
-0.5 -0.5 第一次偏差
-0.4 -0.8 -0.4 第一次偏差

最接近的偏差最小偏差的列名是前两列的计算列。 table 列出了期望的结果,但是我还没有找到达到期望结果的解决方案。

偏差列显示两个函数和一个输入函数之间的偏差。我想找出哪个函数的偏差更接近于0,其次,我想记录偏差。

现在,如果我使用 df.abs().idxmin(axis = 1),我会得到 最小偏差的列名 的正确值,但使用 df.abs().min(axis = 1) 然后 [=27] =]最接近的偏差逻辑上returns 0.4而不是-0.4。然而,仅使用 df.min(axis=1) 将 return -0.8 用于 最接近的偏差 ,这也是不正确的。

如何获得包括正确标志在内的正确信息?

已经谢谢了!

用你的方法得到最接近的索引后,我们可以索引到dataframe中得到相应的值:

# your way for indexes
inds = df.abs().idxmin(axis=1)

# for values: either this (being deprecated..)
vals = df.lookup(df.index, inds)

# or this with numpy's "fancy" indexing
vals = df.to_numpy()[np.arange(len(df)), df.columns.get_indexer(inds)]

# then putting to frame
df["closest deviation"] = vals
df["column name of smallest deviation"] = inds

获得

   first deviation  second deviation  closest deviation column name of smallest deviation
0             -0.5               NaN               -0.5                   first deviation
1             -0.4              -0.8               -0.4                   first deviation

笔记:

DataFrame.lookup 已被弃用,因此其他方法是转到 numpy 域并在那里建立索引。由于 inds 是列名但 numpy 不知道它们,因此我们使用 get_indexer.

获得它们的整数位置