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.021
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/8/2019 0.965
8/12/2019 0.965
尝试下面的选项 1,其中包括创建一个新的 df 并将其合并(您已经所在的路线)
或@piRSquared 建议的选项 2 (bfill()
代替ffill()
)
df['Dates'] = pd.to_datetime(df['Dates'])
a=pd.DataFrame({'Dates':pd.bdate_range('2019-07-26', '2019-08-12')})
df.merge(a, on='Dates', how='outer').sort_values('Dates').bfill().dropna().reset_index(drop=True)
Output
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
df.set_index('Dates').asfreq('B').bfill().reset_index()
Output
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)