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

基于日期列在Pandas合并中添加30天滞后数据的实现方法

问题描述

我当前通过pd.merge基于日期列将小DataFrame(pmms_df)合并到大型DataFrame(df_final)中,代码如下:

df_final = pd.merge(df_final, pmms_df, how='left', on='PredictionDate')

pmms_df的数据结构:

PredictionDate    U.S. 30 yr FRM  U.S. 15 yr FRM
0      2014-12-31            3.87          3.15
1      2015-01-01            3.87          3.15
2      2015-01-02            3.87          3.15
3      2015-01-03            3.87          3.15
4      2015-01-04            3.87          3.15
               ...  ... ... ...
2769    2022-07-31           5.30          4.58
2770    2022-08-01           4.99          4.26
2771    2022-08-02           4.99          4.26
2772    2022-08-03           4.99          4.26
2773    2022-08-04           4.99          4.26

df_final是包含20000+行、61列的大型DataFrame,合并后相关列如下:

PredictionDate    U.S. 30 yr FRM  U.S. 15 yr FRM
0      2022-03-09            3.85           3.09
1      2022-04-11            5.00           4.17
2      2022-05-10            5.30           4.48
3      2022-06-09            5.23           4.38
4      2021-04-09            3.13           2.42
... ... ... ...
20528   2022-01-11           3.45           2.62
20529   2022-02-09           3.69           2.93
20530   2022-03-09           3.85           3.09
20531   2022-04-11           5.00           4.17
20532   2022-05-10           5.30           4.48

现在需要在df_final中新增30yrLag和15yrLag两列,分别存储PredictionDate提前30天对应的pmms_df中的30年期和15年期FRM数据,期望输出:

PredictionDate   U.S. 30 yr FRM  U.S. 15 yr FRM  30yrLag 15yrLag
0      2022-03-09            3.85           3.09           3.72  3.12
1      2022-04-11            5.00           4.17           5.05  4.15
2      2022-05-10            5.30           4.48           5.32  4.58
3      2022-06-09            5.23           4.38            .     .
4      2021-04-09            3.13           2.42            .     .
... ... ... ...
20528   2022-01-11           3.45           2.62            .     .
20529   2022-02-09           3.69           2.93            .     .
20530   2022-03-09           3.85           3.09            .     .
20531   2022-04-11           5.00           4.17            .     .
20532   2022-05-10           5.30           4.48            .     .
解决方案

1. 统一日期格式

首先确保两个DataFrame的日期列是datetime类型,避免计算错误:

pmms_df['PredictionDate'] = pd.to_datetime(pmms_df['PredictionDate'])
df_final['PredictionDate'] = pd.to_datetime(df_final['PredictionDate'])

2. 生成滞后日期并合并数据

在df_final中创建提前30天的日期列,再通过该列与pmms_df匹配获取滞后数据:

# 生成提前30天的临时日期列
df_final['LagDate'] = df_final['PredictionDate'] - pd.Timedelta(days=30)

# 重命名pmms_df的列,避免合并后名称冲突
lag_data = pmms_df.rename(columns={
    'PredictionDate': 'LagDate',
    'U.S. 30 yr FRM': '30yrLag',
    'U.S. 15 yr FRM': '15yrLag'
})

# 左连接获取滞后数据,仅保留需要的列
df_final = pd.merge(df_final, lag_data[['LagDate', '30yrLag', '15yrLag']], how='left', on='LagDate')

# 可选:删除临时的LagDate列
df_final.drop('LagDate', axis=1, inplace=True)

3. 处理无匹配的情况

如果提前30天的日期在pmms_df中不存在,对应列会显示NaN,可按需替换为指定符号:

df_final[['30yrLag', '15yrLag']] = df_final[['30yrLag', '15yrLag']].fillna('.')

说明

  • 左连接保证不会丢失df_final原有数据;
  • 重命名列是为了避免与已有的FRM列名称冲突;
  • 该方法通过精准匹配日期,确保滞后数据的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:18:19