基于工作日索引填充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
相关产品推荐
相关产品推荐

