python - 按列分组时查找最接近的值
问题描述
我想创建 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
希望这有点道理。
我已经想到了这样做的潜在方法:
- 使用for循环..
- 第一个循环到期
- 然后解析 p_price 并将所有值与每个 x_price 进行比较并选择最接近的值 (min(abs())
- 但是,这似乎是最长的方法-如果有办法将其矢量化,那将是理想的!
但是,我没有成功。
谢谢!
解决方案
我认为一个不错的解决方案是:
df['closest_price'] = \
df.apply(lambda x: df[df.p_price <= x.x_price]['p_price'].max(), axis=1)
推荐阅读
- python - 在我的 Conda 环境中哪里安装 pip 包?
- dependency-injection - Xamarin 依赖注入失败 - 尝试获取特定于平台的实现时崩溃
- javascript - setState() 之后的 Console.log() 不返回更新的状态
- java - 输入验证检查输入是否为双精度
- python - AWS Lambda 层
- javascript - 尝试返回字符串 Nodejs VM 时的引用错误
- java - 如何为实体实现多个@MappedSuperClass 继承
- google-apps-script - 如何将操作单元格更改为在 Google 表格中输入的任何内容
- django - 如何向数据库发出多个请求?
- css - css - 水平自动拉伸按钮