I have below dataframe, and as you notice EffectiveDate is beginning of quarter and sometime values in EffectiveDate are missing. I would like to have a continuous monthly dates in EffectiveDate column with all column filled from most recent EffectiveDate.
Example: For each Group = A, Since values for EffectiveDate = 2/1/2022 & 3/1/2022 are missing so need to fill all the column values from 1/1/2022, and so on..
Input DF:
import pandas as pd
data = {
'Group': ['A'] * 24,
'EffectiveDate': [
'1/1/2022', '1/1/2022', '1/1/2022', '1/1/2022', '1/1/2022', '1/1/2022',
'4/1/2022', '4/1/2022', '4/1/2022', '4/1/2022', '4/1/2022', '4/1/2022',
'7/1/2022', '7/1/2022', '7/1/2022', '7/1/2022', '7/1/2022', '7/1/2022',
'10/1/2022', '10/1/2022', '10/1/2022', '10/1/2022', '10/1/2022', '10/1/2022'
],
'ForecastDate': [
'1/1/2022', '2/1/2022', '3/1/2022', '4/1/2022', '5/1/2022', '6/1/2022',
'4/1/2022', '5/1/2022', '6/1/2022', '7/1/2022', '8/1/2022', '9/1/2022',
'7/1/2022', '8/1/2022', '9/1/2022', '10/1/2022', '11/1/2022', '12/1/2022',
'10/1/2022', '11/1/2022', '12/1/2022', '1/1/2023', '2/1/2023', '3/1/2023'
],
'SKU': ['ABC12'] * 24,
'Source': ['fdhh'] * 24
}
df = pd.DataFrame(data)
Output DF:
| Group |EffectiveDate| ForecastDate| SKU| Source |
|-------|------------|------------|--------|--------|
| A | 1/1/2022 | 1/1/2022 | ABC12 | fdhh |
| A | 1/1/2022 | 2/1/2022 | ABC12 | fdhh |
| A | 1/1/2022 | 3/1/2022 | ABC12 | fdhh |
| A | 1/1/2022 | 4/1/2022 | ABC12 | fdhh |
| A | 1/1/2022 | 5/1/2022 | ABC12 | fdhh |
| A | 1/1/2022 | 6/1/2022 | ABC12 | fdhh |
| A | 2/1/2022 | 2/1/2022 | ABC12 | fdhh |
| A | 2/1/2022 | 3/1/2022 | ABC12 | fdhh |
| A | 2/1/2022 | 4/1/2022 | ABC12 | fdhh |
| A | 2/1/2022 | 5/1/2022 | ABC12 | fdhh |
| A | 2/1/2022 | 6/1/2022 | ABC12 | fdhh |
| A | 3/1/2022 | 3/1/2022 | ABC12 | fdhh |
| A | 3/1/2022 | 4/1/2022 | ABC12 | fdhh |
| A | 3/1/2022 | 5/1/2022 | ABC12 | fdhh |
| A | 3/1/2022 | 6/1/2022 | ABC12 | fdhh |
| A | 4/1/2022 | 4/1/2022 | ABC12 | fdhh |
| A | 4/1/2022 | 5/1/2022 | ABC12 | fdhh |
| A | 4/1/2022 | 6/1/2022 | ABC12 | fdhh |
| A | 4/1/2022 | 7/1/2022 | ABC12 | fdhh |
| A | 4/1/2022 | 8/1/2022 | ABC12 | fdhh |
| A | 4/1/2022 | 9/1/2022 | ABC12 | fdhh |
| A | 5/1/2022 | 5/1/2022 | ABC12 | fdhh |
| A | 5/1/2022 | 6/1/2022 | ABC12 | fdhh |
| A | 5/1/2022 | 7/1/2022 | ABC12 | fdhh |
| A | 5/1/2022 | 8/1/2022 | ABC12 | fdhh |
| A | 5/1/2022 | 9/1/2022 | ABC12 | fdhh |
| A | 6/1/2022 | 6/1/2022 | ABC12 | fdhh |
| A | 6/1/2022 | 7/1/2022 | ABC12 | fdhh |
| A | 6/1/2022 | 8/1/2022 | ABC12 | fdhh |
| A | 6/1/2022 | 9/1/2022 | ABC12 | fdhh |
| A | 7/1/2022 | 7/1/2022 | ABC12 | fdhh |
| A | 7/1/2022 | 8/1/2022 | ABC12 | fdhh |
| A | 7/1/2022 | 9/1/2022 | ABC12 | fdhh |
| A | 7/1/2022 | 10/1/2022 | ABC12 | fdhh |
| A | 7/1/2022 | 11/1/2022 | ABC12 | fdhh |
| A | 7/1/2022 | 12/1/2022 | ABC12 | fdhh |
| A | 8/1/2022 | 8/1/2022 | ABC12 | fdhh |
| A | 8/1/2022 | 9/1/2022 | ABC12 | fdhh |
| A | 8/1/2022 | 10/1/2022 | ABC12 | fdhh |
| A | 8/1/2022 | 11/1/2022 | ABC12 | fdhh |
| A | 8/1/2022 | 12/1/2022 | ABC12 | fdhh |
| A | 9/1/2022 | 9/1/2022 | ABC12 | fdhh |
| A | 9/1/2022 | 10/1/2022 | ABC12 | fdhh |
| A | 9/1/2022 | 11/1/2022 | ABC12 | fdhh |
| A | 9/1/2022 | 12/1/2022 | ABC12 | fdhh |
| A | 10/1/2022 | 10/1/2022 | ABC12 | fdhh |
| A | 10/1/2022 | 11/1/2022 | ABC12 | fdhh |
| A | 10/1/2022 | 12/1/2022 | ABC12 | fdhh |
| A | 10/1/2022 | 1/1/2023 | ABC12 | fdhh |
| A | 10/1/2022 | 2/1/2023 | ABC12 | fdhh |
| A | 10/1/2022 | 3/1/2023 | ABC12 | fdhh |
| A | 11/1/2022 | 11/1/2022 | ABC12 | fdhh |
| A | 11/1/2022 | 12/1/2022 | ABC12 | fdhh |
| A | 11/1/2022 | 1/1/2023 | ABC12 | fdhh |
| A | 11/1/2022 | 2/1/2023 | ABC12 | fdhh |
| A | 11/1/2022 | 3/1/2023 | ABC12 | fdhh |
| A | 12/1/2022 | 12/1/2022 | ABC12 | fdhh |
| A | 12/1/2022 | 1/1/2023 | ABC12 | fdhh |
| A | 12/1/2022 | 2/1/2023 | ABC12 | fdhh |
| A | 12/1/2022 | 3/1/2023 | ABC12 | fdhh |
You can convert
EffectiveDateto month periods bySerie.dt.to_period, rehsape byGroupBy.cumcountandDataFrame.pivot, so possible useDataFrame.reindexper groups. Then reshape back byDataFrame.stack, convertMultiIndexto columns and filterForecastDateif greater or equal byEffectiveDate:EDIT: For dynamic filtering by
Groupcolumn use helper dictionarymappingwithSeries.mapin last step for filtering: