Вы можете сделать, например:
def resample(g, date):
return g.reindex(pd.date_range(end=date, freq='D', periods=90)).fillna(0)
for date, g in (df["Number_of_tickets_sold"].groupby(df['Event_date'])):
print(resample(g, date))
Это даст вам для каждого события серию продаж билетов в день, проиндексированных по дате. Если вас не интересует индекс, вы можете сделать:
def resample(g, date):
return (g.reindex(pd.date_range(end=date, freq='D', periods=90))
.fillna(0)
.reset_index(drop=True)
)
pd.DataFrame({date:resample(g, date) for date,g in df["Number_of_tickets_sold"]
.groupby(df['Event_date'])})
Тогда у вас будет такой фрейм данных:
2019-01-01 2019-02-21 2019-03-24 2019-10-01
0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0
4 0.0 0.0 0.0 0.0
5 0.0 0.0 0.0 0.0
, где в столбцах указаны ежедневные продажи билетов на каждое событие за каждый день.
Если вы хотите использовать тот же формат, что и исходные данные:
def resample(g):
dates = pd.date_range(end=g['Event_date'][0], freq='D', periods=90)
return g['Number_of_tickets_sold'].reindex(dates).fillna(0)
(df.set_index('Buying_date')
.groupby('Event_date')
.apply(resample)
.reset_index()
)
даст вам
Event_date level_1 Number_of_tickets_sold
0 2019-01-01 2018-10-04 0.0
1 2019-01-01 2018-10-05 0.0
2 2019-01-01 2018-10-06 0.0
3 2019-01-01 2018-10-07 0.0
4 2019-01-01 2018-10-08 0.0
5 2019-01-01 2018-10-09 0.0
, где level_1
столбец - дата продажи.