首页 > 解决方案 > Python Pandas:返回连续缺失的工作日日期并在数据框中缺失日期旁边分配速率

问题描述

Dates       rates
7/26/2019   1.04
7/30/2019   1.0116
7/31/2019   1.005
8/1/2019    1.035
8/2/2019    1.01
8/6/2019    0.9886
8/12/2019   0.965

df = df.merge(
    pd.DataFrame({'Dates':df['Dates'] + pd.offsets.BDay()}), on='Dates', how='outer'
).sort_values('Dates').bfill().dropna().reset_index(drop=True)

print(df)

我尝试了上面的代码,但它无法修复连续丢失的工作日。它只能修复1天。在上述数据框中,缺少 2019 年 7 月 29 日和 8 月 5 日、7 日、8 日、9 日。这些是工作日。我需要填充缺少的工作日日期并分配缺少日期旁边的“费率”。例如:将 2019 年 7 月 30 日的“汇率”分配给缺失的 2019 年 7 月 29 日,依此类推,用于所有缺失的日期。请建议。谢谢我期待以下输出

Dates       rates
7/26/2019   1.04
7/29/2019   1.0116
7/30/2019   1.0116
7/31/2019   1.005
8/1/2019    1.035
8/2/2019    1.01
8/5/2019    0.9886
8/6/2019    0.9886
8/7/2019    0.965
8/8/2019    0.965
8/9/2019    0.965
8/12/2019   0.965

标签: pythonpandas

解决方案


您可以使用reindexwithbdate_range仅创建工作日费率中的所有缺失值:

new_df = df.set_index('Dates')\
           .reindex( pd.bdate_range(df.Dates.min(), df.Dates.max(), name='Dates'), 
                     method='bfill')\
           .reset_index() 
print (new_df)
        Dates   rates
0  2019-07-26  1.0400
1  2019-07-29  1.0116
2  2019-07-30  1.0116
3  2019-07-31  1.0050
4  2019-08-01  1.0350
5  2019-08-02  1.0100
6  2019-08-05  0.9886
7  2019-08-06  0.9886
8  2019-08-07  0.9650
9  2019-08-08  0.9650
10 2019-08-09  0.9650
11 2019-08-12  0.9650

推荐阅读