pythonpandas

Expanding pandas data frame with date range in columns


I have a pandas dataframe with dates and strings similar to this:

Start        End           Note    Item
2016-10-22   2016-11-05    Z       A
2017-02-11   2017-02-25    W       B

I need to expand/transform it to the below, filling in weeks (W-SAT) in between the Start and End columns and forward filling the data in Note and Items:

Start        Note    Item
2016-10-22   Z       A
2016-10-29   Z       A
2016-11-05   Z       A
2017-02-11   W       B
2017-02-18   W       B
2017-02-25   W       B

What's the best way to do this with pandas? Some sort of multi-index apply?


Solution

  • You can iterate over each row and create a new dataframe and then concatenate them together

    pd.concat([pd.DataFrame({'Start': pd.date_range(row.Start, row.End, freq='W-SAT'),
                   'Note': row.Note,
                   'Item': row.Item}, columns=['Start', 'Note', 'Item']) 
               for i, row in df.iterrows()], ignore_index=True)
    
           Start Note Item
    0 2016-10-22    Z    A
    1 2016-10-29    Z    A
    2 2016-11-05    Z    A
    3 2017-02-11    W    B
    4 2017-02-18    W    B
    5 2017-02-25    W    B