Мне пришлось сделать то же самое для проекта: возможно, это не лучшее решение для вас, но оно может вам помочь. (и я надеюсь избавить вас от головной боли, которая у меня была) Вот как мне это удалось с помощью https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html
df_DateRange=pd.DataFrame()
df_1=pd.DataFrame()
grouped=pd.DataFrame()
#1. Create a DataFrame with alldays (your step2):
#Create a DataFrame with alldays
dates_list = ['2019-12-31', '2020-01-05']
df_DateRange['date']=pd.date_range(start=dates_list [0],end=dates_list [-1],freq='1D')
df_DateRange['date']=df_DateRange['date'].dt.strftime('%Y-%m-%d')
df_DateRange.set_index(['date'],inplace=True)
#Set index of you Datos DataFrame:
Datos.set_index(['date'], inplace=True)
#Join both DataFrame:
df_1=df_DateRange.join(Datos)
#2. Replace the NaN:
df_1['site'].fillna("", inplace=True)
df_1['value'].fillna(0, inplace=True)
df_1['value2'].fillna(0, inplace=True)
#3. do the calculation:
grouped = df_1.groupby('site').sum()
df_DateRange:
дата 0 2019-12- 31 1 2020-01-01 2 2020-01-02 3 2020-01-03 4 2020-01-04 5 2020-01-05
Дата: дата значение объекта2 0 2020-01-01 site1 1 -1 1 2020-01-01 site2 2 -2 2 2020-01-02 site1 10 -10 3 2020-01-02 site2 20 -20
df1: значение сайта value2 дата 2019-12-31 0.0 0.0 2020-01-01 site1 1.0 -1.0 2020-01-01 site2 2.0 -2.0 2020-01-02 site1 10.0 -10.0 2020-01-02 site2 20.0 -20.0 2020-01-03 0.0 0.0 2020-01-04 0,0 0,0 2020-01-05 0,0 0,0
сгруппировано = значение значение2 сайт 0,0 0,0 сайт1 11,0 -11,0 сайт2 22,0 -22,0