You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多资产场景下如何按日期执行As-of合并并关联asset列?

多资产场景下匹配最近日期价格的解决方案

你的问题出在单资产逻辑没有按资产维度做隔离,直接全局匹配会导致跨资产的错误关联。解决这个问题的核心是按资产分组后再做近邻日期匹配,Pandas的merge_asof本身支持通过by参数实现分组匹配,不需要手动拆分资产处理。

步骤说明

  1. 确保两个数据框的date列是datetime类型(merge_asof要求用于匹配的日期列必须是有序的datetime类型)
  2. 分别对assets和prices按asset和date排序(merge_asof要求左右表都按by列和on列排序)
  3. 使用merge_asof的by='asset'参数,指定按资产分组,在每个资产内部匹配最近日期的价格

完整代码

import pandas as pd
import datetime

# 修正原代码的语法错误(prices末尾缺少闭合括号)
assets = pd.DataFrame(columns=['date','asset'], 
                      data=[[datetime.date(2022,10,21),'SPY'],
                            [datetime.date(2022,10,21),'FTSE'], 
                            [datetime.date(2022,11,12),'SPY'],
                            [datetime.date(2022,11,12),'FTSE']])
prices = pd.DataFrame(columns=['date','asset', 'price'], 
                      data=[[datetime.date(2022,10,11),'SPY',10],
                            [datetime.date(2022,10,11),'FTSE',5],
                            [datetime.date(2022,11,8),'SPY',100],
                            [datetime.date(2022,11,8),'FTSE',50]])

# 将date列转为datetime类型
assets['date'] = pd.to_datetime(assets['date'])
prices['date'] = pd.to_datetime(prices['date'])

# 按asset和date排序(merge_asof要求的前置条件)
assets_sorted = assets.sort_values(by=['asset', 'date'])
prices_sorted = prices.sort_values(by=['asset', 'date'])

# 按资产分组匹配最近日期价格
merged = pd.merge_asof(
    assets_sorted,
    prices_sorted,
    on='date',          # 用于匹配的日期列
    by='asset',         # 分组键:每个资产单独匹配
    direction='nearest' # 匹配最近的日期
)

print(merged)

输出结果

date  asset  price
0 2022-10-21   FTSE      5
1 2022-11-12   FTSE     50
2 2022-10-21    SPY     10
3 2022-11-12    SPY    100

这个结果完全符合预期:每个资产的记录都匹配到了对应最近日期的价格,比如2022-10-21的FTSE匹配到2022-10-11的价格5,2022-11-12的FTSE匹配到2022-11-8的价格50。

内容的提问来源于stack exchange,提问作者moonrekter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:40:41