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

基于工作日索引填充DataFrame多列缺失日期的实现方法

解决方法:将多指标日期值对齐到工作日序列

我来给你一步步搞定这个需求,核心思路就是把每个指标的日期和数值单独拆解出来,再统一对齐到你生成的工作日时间序列上,缺失的日期自动填充NA就行:

1. 先准备基础数据和工作日序列

首先把你的示例DataFrame和工作日序列定义好(注意要把日期字符串转成datetime类型,后面处理才不会踩坑):

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'A_DATE': ['2014-04-04', '2014-04-05', '2014-04-09'],
    'A_VALUE': [2.1, 2.3, 2.2],
    'B_DATE': ['2014-04-04', '2014-04-08', '2014-04-09'],
    'B_VALUE': [4.8, 4.9, 4.6],
    'C_DATE': ['2014-04-04', '2014-04-05', '2014-04-08'],
    'C_VALUE': [0.6, 0.8, 0.2]
})

# 生成目标工作日时间序列
workdays = pd.bdate_range('2013-03-27', '2018-03-28')

2. 逐个处理指标并对齐到工作日序列

我们可以把每个指标(A、B、C)的日期和数值转成以日期为索引的Series,再用reindex方法对齐到工作日序列,没有匹配的日期就会自动填充NaN(也就是你要的NA):

# 初始化结果DataFrame,用工作日序列做索引
result_df = pd.DataFrame(index=workdays)

# 处理A指标
a_series = pd.Series(df['A_VALUE'].values, index=pd.to_datetime(df['A_DATE']))
result_df['A_VALUE'] = a_series.reindex(workdays)

# 处理B指标
b_series = pd.Series(df['B_VALUE'].values, index=pd.to_datetime(df['B_DATE']))
result_df['B_VALUE'] = b_series.reindex(workdays)

# 处理C指标
c_series = pd.Series(df['C_VALUE'].values, index=pd.to_datetime(df['C_DATE']))
result_df['C_VALUE'] = c_series.reindex(workdays)

3. 批量优化(适合多指标场景)

如果以后有更多类似的指标(比如D、E),重复写代码太麻烦,用循环批量处理更高效:

# 自动提取所有指标前缀(A、B、C)
metrics = list(set(col.split('_')[0] for col in df.columns if '_DATE' in col))

result_df = pd.DataFrame(index=workdays)

for metric in metrics:
    date_col = f"{metric}_DATE"
    value_col = f"{metric}_VALUE"
    # 创建以日期为索引的Series
    metric_series = pd.Series(df[value_col].values, index=pd.to_datetime(df[date_col]))
    # 对齐到工作日序列并加入结果
    result_df[value_col] = metric_series.reindex(workdays)

这样处理完之后,result_df就是以你的工作日序列为索引,每个指标对应日期填充数值、缺失项为NA的DataFrame了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:26:49