【问题标题】:Recording the minimum absolute deviation, but including its sign记录最小绝对偏差,但包括其符号
【发布时间】:2021-08-28 04:29:37
【问题描述】:

我有一个如下形式的 pandas df:

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

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

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

现在,如果我使用df.abs().idxmin(axis = 1),我会得到最小偏差的列名 的正确值,但使用df.abs().min(axis = 1) 那么对于最接近的偏差,逻辑上会返回 0.4而不是-0.4。然而,仅使用 df.min(axis=1) 会为 最接近的偏差返回 -0.8,这也是不正确的。

我如何获得正确的信息,包括正确的标志?

已经谢谢了!

【问题讨论】:

  • 嗨@Paul1911,我猜在想要的结果中,右下角的值也应该是first deviaton,对吧?
  • 嗨穆斯塔法,是的,正确的。谢谢,我已经调整了:)
  • 谢谢。据我所知,我试图写一个答案,希望它有所帮助。
  • 确实有帮助,非常感谢!它现在正在工作!

标签: python pandas dataframe indexing calculated-columns


【解决方案1】:

通过你的方式得到最接近的索引后,我们可以索引到数据框以获取相应的值:

# 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 获取它们的整数位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多