如何匹配覆盖同期但缺失不同日期的两组利率时间序列?
匹配两组时间序列并计算利差的简便方法
嘿,这个需求我太熟了!不管你用Excel还是Python,都有很简便的办法搞定,分两种常用场景给你拆解:
方法一:用Excel处理
场景1:删除长序列的额外日期(仅保留两组都有的交易日)
假设全日历日数据在A列(日期)和B列(利率),交易日数据在C列(日期)和D列(利率):
- 新建一列(比如E列),在E2单元格输入公式:
=XLOOKUP(A2,$C$2:$C$1000,$D$2:$D$1000,""),下拉填充整个E列。这个公式会把全日历日中属于交易日的利率匹配过来,非交易日则显示空白。 - 选中E列,点击「数据」→「筛选」,筛选出非空白的行,删除空白行后,剩下的就是两组都有数据的日期,直接在新列计算
B列 - E列就能得到利差。
场景2:给短序列补全日期(填充空白或插值)
如果想保留所有日历日,给交易日数据补全非交易日的内容:
- 同样用
XLOOKUP匹配:在D列旁新建F列,F2输入=XLOOKUP(A2,$C$2:$C$1000,$D$2:$D$1000,""),下拉后F列就和A列日期完全对应,非交易日显示空白。之后用IFERROR(B2-F2,"")计算利差,避免空白行出现错误值。 - 如果需要插值(比如线性插值填补非交易日数据),可以用
FORECAST.ETS函数:F2输入=FORECAST.ETS(A2,$D$2:$D$1000,$C$2:$C$1000),它会自动基于已有交易日数据对非交易日做时间序列插值。
方法二:用Python(Pandas库)处理
Pandas是处理时间序列的利器,几步就能完成对齐:
先读取两组数据为DataFrame(假设日期列名为
date,利率列分别为rate_full和rate_trade):import pandas as pd # 读取全日历日数据,解析日期并设为索引 df_full = pd.read_csv("full_dates.csv", parse_dates=["date"], index_col="date") # 读取交易日数据,同样处理日期索引 df_trade = pd.read_csv("trade_dates.csv", parse_dates=["date"], index_col="date")仅保留共同日期并计算利差:
# 取两组数据的日期交集,自动对齐 df_combined = df_full.join(df_trade, how="inner", lsuffix="_full", rsuffix="_trade") # 计算利差列 df_combined["spread"] = df_combined["rate_full"] - df_combined["rate_trade"]运行后
df_combined里就只有两组都有数据的日期,直接查看spread列即可。补全短序列日期(填充空白或插值):
# 将交易日数据重采样到全日历日,缺失值留空 df_trade_full = df_trade.reindex(df_full.index) # 若需要线性插值填充缺失值,替换为下面一行 # df_trade_full = df_trade.reindex(df_full.index).interpolate(method="linear") # 合并数据并计算利差 df_combined = pd.concat([df_full, df_trade_full], axis=1) df_combined["spread"] = df_combined["rate_full"] - df_combined["rate_trade"]
内容的提问来源于stack exchange,提问作者Mike B
相关产品推荐
相关产品推荐

