首页 > 解决方案 > 按列分组时查找最接近的值

问题描述

我想创建 2 个新列,这将为我提供最接近某个值的值和 ID。这就是我在 python 中的 df 的结构:

x_time    expiration    x_price    p_time    p_price
 100          4          55.321     100        21
 105          4          51.120     105        25
 110          4          44.412     110        33.1
 100          5           9.1       100        3.1
 105          5           9.5       105        5.1
 110          5           8.2       110        12.1 
 100          6           122.1     100        155.9
 105          6           144.1     105        134.2 
 .......

本质上,我想创建一个新列(称为“closest_time”和“closest_price”),这将是仅针对该组的 x_price 最接近的 p_price(因此该组到期)

因此,预期的结果将如下所示:

x_time    expiration    x_price    p_time    p_price   closest_price closest_p_time
 100          4          55.321     100        21           33.1       110
 105          4          51.120     105        25           33.1       110
 110          4          44.412     110        33.1         33.1       110
 100          5           9.1       100        3.1          12.1       110
 105          5           9.5       105        5.1          12.1       110
 110          5           8.2       110        12.1          5.1       105
 100          6           122.1     100        155.9       134.2       105
 105          6           144.1     105        134.2       134.22      100

希望这有点道理。

我已经想到了这样做的潜在方法:

  1. 使用for循环..
    • 第一个循环到期
    • 然后解析 p_price 并将所有值与每个 x_price 进行比较并选择最接近的值 (min(abs())
    • 但是,这似乎是最长的方法-如果有办法将其矢量化,那将是理想的!

但是,我没有成功。

谢谢!

标签: pythonpandas

解决方案


我认为一个不错的解决方案是:

df['closest_price'] = \
    df.apply(lambda x: df[df.p_price <= x.x_price]['p_price'].max(), axis=1)

推荐阅读