Skip to content Skip to sidebar Skip to footer

Python Pandas : Return The Consecutive Missing Weekdays Dates And Assign Rate Next To Missing Dates In A Dataframe

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({'D

Solution 1:

you can use reindex with bdate_range to create all the missing values in rates for business days only:

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

Solution 2:

You could create a Series of all business days then outer merge and bfill the missing values. This will retain any non-business days in your initial DataFrame (if any) and will also use their values in the filling.

import pandas as pd
#df['Dates'] = pd.to_datetime(df['Dates'])

s = pd.Series(pd.date_range(df['Dates'].min(), df['Dates'].max(), freq='D'),
              name='Dates')
s = s[s.dt.dayofweek.lt(5)]

df = df.merge(s, how='outer').sort_values('Dates').bfill()

        Dates   rates
0  2019-07-26  1.0400
7  2019-07-29  1.0116
1  2019-07-30  1.0116
2  2019-07-31  1.0050
3  2019-08-01  1.0350
4  2019-08-02  1.0100
8  2019-08-05  0.9886
5  2019-08-06  0.9886
9  2019-08-07  0.9650
10 2019-08-08  0.9650
11 2019-08-09  0.9650
6  2019-08-12  0.9650

Post a Comment for "Python Pandas : Return The Consecutive Missing Weekdays Dates And Assign Rate Next To Missing Dates In A Dataframe"