基于日期列在Pandas中创建30天滞后列的实现方法
实现步骤
1. 确保日期列格式正确
首先需要将PredictionDate列转换为datetime类型,这样才能进行日期运算:
import pandas as pd # 转换日期列格式 df['PredictionDate'] = pd.to_datetime(df['PredictionDate'])
2. 创建日期-数值映射参考表
由于数据中存在重复日期(同一日期对应多行相同数值),先提取唯一日期及其对应的FRM值,作为后续查找的参考:
# 提取唯一日期及对应FRM值,以日期为索引 unique_dates = df.drop_duplicates(subset='PredictionDate').set_index('PredictionDate') ref_30yr = unique_dates['U.S. 30 yr FRM'] ref_15yr = unique_dates['U.S. 15 yr FRM']
3. 计算每行的30天前日期并映射对应数值
为每行计算目标日期的30天前日期,再通过映射获取该日期对应的FRM值:
# 计算30天前的日期 df['lag_date'] = df['PredictionDate'] - pd.Timedelta(days=30) # 映射得到30天前的FRM值,不存在则为NaN df['30yrLag'] = df['lag_date'].map(ref_30yr) df['15yrLag'] = df['lag_date'].map(ref_15yr)
4. 处理缺失值(可选)
如果需要将缺失值替换为.(如示例所示),执行以下步骤:
# 将NaN替换为'.' df['30yrLag'] = df['30yrLag'].fillna('.') df['15yrLag'] = df['15yrLag'].fillna('.') # 删除临时的lag_date列(按需选择) df = df.drop(columns=['lag_date'])
最终效果
运行上述代码后,你的DataFrame会新增30yrLag和15yrLag两列,对应每行日期往前30天的FRM数据,缺失日期则显示.。
内容的提问来源于stack exchange,提问作者Hefe
相关产品推荐
相关产品推荐

