在 Python 中从多列中查找最接近的值并添加到新列

2023-12-10

我有以下数据框:

import pandas as pd
import numpy as np
data = {
    "index": [1, 2, 3, 4, 5],
    "A": [11, 17, 5, 9, 10],
    "B": [8, 6, 16, 17, 9],
    "C": [10, 17, 12, 13, 15],
    "target": [12, 13, 8, 6, 12]
}
df = pd.DataFrame.from_dict(data)
print(df)

我想在 A、B 和 C 列中找到列目标的最接近值,并将这些值放入列结果中。据我所知,我需要使用abs()和argmin()函数。 这是我期望的输出:

     index   A      B     C    target  result
0      1     11     8    10      12      11
1      2     17     6    17      13      17
2      3     5     16    12       8       5
3      4     9     17    13       6       9
4      5     10     9    15      12      10

以下是我从 stackoverflow 找到的解决方案和链接,这可能会有所帮助:

(df.assign(closest=df.apply(lambda x: x.abs().argmin(), axis='columns'))
 .apply(lambda x: x[x['target']], axis='columns'))

使用 Pandas 识别每个过滤器列中最接近的值 https://codereview.stackexchange.com/questions/204549/lookup-closest-value-in-pandas-dataframe


从其他列中减去“目标”,使用idxmin获得最小差异的列,然后是lookup:

idx = df.drop(['index', 'target'], 1).sub(df.target, axis=0).abs().idxmin(1)
df['result'] = df.lookup(df.index, idx)
df
   index   A   B   C  target  result
0      1  11   8  10      12      11
1      2  17   6  17      13      17
2      3   5  16  12       8       5
3      4   9  17  13       6       9
4      5  10   9  15      12      10

处理字符串列和 NaN 的通用解决方案(以及将目标中的 NaN 值替换为“v1”中的值的要求):

df2 = df.select_dtypes(include=[np.number])
idx = df2.drop(['index', 'target'], 1).sub(df2.target, axis=0).abs().idxmin(1)
df['result'] = df2.lookup(df2.index, idx.fillna('v1'))

您还可以通过使用获取整数索引来索引底层 NumPy 数组df.columns.get_indexer.

# idx = df[['A', 'B', 'C']].sub(df.target, axis=0).abs().idxmin(1)
idx = df.drop(['index', 'target'], 1).sub(df.target, axis=0).abs().idxmin(1)
# df['result'] = df.values[np.arange(len(df)), df.columns.get_indexer(idx)]
df['result'] = df.values[df.index, df.columns.get_indexer(idx)]

df
   index   A   B   C  target  result
0      1  11   8  10      12      11
1      2  17   6  17      13      17
2      3   5  16  12       8       5
3      4   9  17  13       6       9
4      5  10   9  15      12      10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中从多列中查找最接近的值并添加到新列 的相关文章

随机推荐

  • 如何判断套接字是否关闭

    我制作了一个简单的客户端服务器程序 但主要问题是 一旦客户端和服务器之间建立连接 如果客户端关闭程序 服务器会重复执行最后一条消息 有时会产生巨大的问题 所以我想要的是是否有任何函数可以调用来获取 SOCKET 结构的状态 这样如果客户端关
  • 在 Flask 应用程序中使用 Markdown 混合图像

    我正在使用构建静态站点Flask FlatPages 并跟进Frozen Flask 在我的页面中 我想将文本与图像混合在一起 这是执行此操作的天真的方法 Look at this image img src Hmm it does not
  • 按 VB.NET 形式的日期搜索条件从 Access 数据库中选择行

    我有一个非常简单的问题 我的 VB NET 表单上有几个日期选择器控件 用户选择 startDate 和 endDate 并且显示相关表中的所有行 其中包含orderDate用户选择的开始日期和结束日期之间 以下是相关代码 Private
  • 从基类创建派生类的实例

    我有我的抽象基类A public abstract class A ICloneable public int Min get protected set public int Max get protected set public A
  • BOOT_COMPLETED 意图操作的广播无法正常工作

    我有一个接收器类正在监听多个操作 但它无法捕获android intent action BOOT COMPLETED行动 我做错了什么 这是我的清单文件
  • susy 2.0 在断点处更改列

    我没有使用指南针 我更喜欢使用 Breakpoint scss 我用的是ssy 2 0 我知道有很多关于这个问题的帖子 但我没有运气找到任何相关的内容Breakpoint scss and Susy 2 0关于这个话题 import sus
  • Adobe Air 的推送通知 iOS 本机扩展

    我正在为 Adob e AIR 开发 iOS 本机扩展 它将获取推送通知的设备令牌 不幸的是 我不是那么热心的 Objective C 程序员 我不确定我正在使用的代码是否有问题 它编译没有问题 我可以将扩展与 AIR 一起使用 但看起来注
  • 具有相同 ID 的 HTML 元素

    目前我正在开发一个 喜欢 的新闻提要系统 一页上有多个新闻提要 这意味着有多个具有相同 ID 的 喜欢 按钮 这是我用来喜欢帖子的 jquery document ready function likebutton click functi
  • 将韩文字符转换为实体

    我正在尝试将韩语字符转换为 unicode html 实体 但没有任何运气 我使用这个网站 http www mylanguages org converter php但希望在 php 编码中有类似的东西 text echo htmlent
  • 将 XLSX 文件从每月电子邮件(在 Gmail 中)导入到指定的 Google Sheet

    我定期收到客户发来的 XLSX 文件 我希望自动执行将其从 Gmail 自动标记 导入 Google 表格的过程 到目前为止 我设法使其适用于 CSV 文件 但 XLSX 文件似乎更棘手 有人可以帮助调整我的 CSV 文件代码吗 funct
  • SQLiteDataAdapter 更新方法返回 0

    我从 CSV 文件加载了 83 行 但是当我尝试更新 SQLite 数据库时 我得到 0 行 我不知道我做错了什么 程序输出 Num rows loaded is 83 Num rows updated is 0 源代码是 public v
  • Java,IllegalAccessorError:超类访问检查失败

    我一直在用 Java 开发自己的一个小项目 最近 我编译了它并收到了这个错误 线程 main 中的异常java lang IllegalAccessError 超类访问检查失败 类kr w zeale v1 program core Dat
  • oracle SQL语句中rownum与order by子句结合使用

    以下两个 SQL 语句中哪一个将返回所需的结果集 即 Status 0 且 Starttime 最高的十行 两个语句总是返回相同的结果集吗 开始时间是唯一的 SELECT FROM MyTable WHERE Status 0 AND RO
  • 关闭图形所有子图的轴

    我正在创建大量子图 我想关闭所有子图的轴 目前我正在通过以下方式实现这一目标 fig ax plt subplots 7 len clusters fig subplots adjust wspace 0 top 1 0 bottom 0
  • BAT:基于文件修改日期的 if 语句

    我想查看锁定文件的修改日期是否超过 5 秒前或将来 表明 PC 时钟已改回 我怎么能说 if file modifydate lt now 5 seconds or modifydate gt now 运行命令 a 命令 a 将启动我的 J
  • ServiceController.start() 和 ServiceController.stop() 抛出异常?

    下面的代码抛出异常 我不明白我在代码中犯了什么错误 有人可以帮我弄清楚吗 我认为这是一些担保权问题 如果是这样 我如何向任何用户或应用程序授予以编程方式访问此 Windows 服务的安全权限 Dim sc As New ServiceCon
  • 工具栏中 Android 微调器上的翻转箭头

    我在屏幕底部的工具栏中有一个微调器 但微调器旁边的箭头指向下方 这是违反直觉的 有没有什么快速的方法可以将箭头翻转到向上 如果有帮助的话 微调器的定义如下
  • 如何等待异步完成

    我想运行一些异步工作流程 然后等待它完成后再打印一些结果 例如 let dowork n async do printfn work d n let creatework async for x in 1 5 do Async Start
  • 正则表达式:将 $ 放入 [ ]

    echo tests perl pe s s t g Unmatched in regex marked by lt HERE in m s lt HERE 5 020000 at e line 1 lt gt line 1 我不能放 in
  • 在 Python 中从多列中查找最接近的值并添加到新列

    我有以下数据框 import pandas as pd import numpy as np data index 1 2 3 4 5 A 11 17 5 9 10 B 8 6 16 17 9 C 10 17 12 13 15 target