Вот задача, которую я хотел бы выполнить, у меня есть список из примерно 7000 сайтов и 50 категорий, каждый из которых имеет план продаж на комбинацию каждый месяц. Я хочу преобразовать этот ежемесячный план в ежедневный, сравнить его с фактическими данными и создать визуальный отчет для бизнес-аналитики, для этого мне нужно преобразовать плановые данные в ежедневные.
вот пример:
df = pd.DataFrame({'ID':[1,2],
'Month':[1,1],
'Plan':[310,620],
'Month_start_date': ['2020-01-01','2020-01-01']})
print(df)
df['Month_start_date'] = (pd.to_datetime(df['Month_start_date'], format='%Y/%m/%d')
.dt.to_period('m').dt.to_timestamp())
df = df.set_index('Month_start_date')
Теперь функция, которую я хочу применить к каждой строке, возвращает большее количество строк, вот пример:
start = '2020-01-01'
end = '2020-01-05'
dates = pd.date_range(start, end, freq='D')
dates
df= df.reindex(dates,method = 'ffill')
Это возвращает ошибку, так как у индекса есть повторяющиеся значения
ValueError: cannot reindex a non-unique index with a method or limit
Вот мой желаемый вывод
ID Month Plan
2020-01-01 1 1 310
2020-01-02 1 1 310
2020-01-03 1 1 310
2020-01-04 1 1 310
2020-01-05 1 1 310
2020-01-01 2 1 620
2020-01-02 2 1 620
2020-01-03 2 1 620
2020-01-04 2 1 620
2020-01-05 2 1 620
Поскольку число комбинаций, для которых я должен выполнить это, составляет около 800 КБ, на самом деле он выполняется. на циклах (использование .iterrows ()) завершается вечно и кажется очень неэффективным.
Также попытался использовать функцию .groupby.apply (). но это не позволяет мне возвращать фрейм данных для каждой строки (таблица df).
Предложения, необходимые для улучшения этого процесса.