Python 为数据框中缺少的行添加未来日期

Python 为数据框中缺少的行添加未来日期,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,如何用数据框中的下一个日期来估算错过的日期 wtg_at1.tail(10) 环境温度 日期 818 31.237499 2020-03-28 819 32.865974 2020-03-29 820 32.032558 2020-03-30 821 31.671166 楠 822 31.389927 楠 823 31.243660 楠 824 31.206777 楠 825 31.241503 楠 826 31.309531 楠 827 31.382531 楠 如果只有一组缺失值,则可以向前

如何用数据框中的下一个日期来估算错过的日期

wtg_at1.tail(10)
环境温度 日期 818 31.237499 2020-03-28 819 32.865974 2020-03-29 820 32.032558 2020-03-30 821 31.671166 楠 822 31.389927 楠 823 31.243660 楠 824 31.206777 楠 825 31.241503 楠 826 31.309531 楠 827 31.382531 楠
如果只有一组缺失值,则可以向前填充它们,并通过转换为天时间增量的累积和添加计数器:

df['Date'] = pd.to_datetime(df['Date'])

df['Date'] = df['Date'].ffill() + pd.to_timedelta(df['Date'].isna().cumsum(), unit='d')
print (df)
     AmbientTemperatue       Date
818          31.237499 2020-03-28
819          32.865974 2020-03-29
820          32.032558 2020-03-30
821          31.671166 2020-03-31
822          31.389927 2020-04-01
823          31.243660 2020-04-02
824          31.206777 2020-04-03
825          31.241503 2020-04-04
826          31.309531 2020-04-05
827          31.382531 2020-04-06
另一个可能的想法是通过最小日期时间和
数据帧的长度重新分配值:

df['Date'] = pd.date_range(df['Date'].min(), periods=len(df))

如果有多个组缺少值:

print (df)
     AmbientTemperatue        Date
818          31.237499  2020-03-28
819          32.865974  2020-03-29
820          32.032558  2020-03-30
821          31.671166         NaN
822          31.389927         NaN
823          31.243660         NaN
824          31.206777  2020-05-08
825          31.241503         NaN
826          31.309531         NaN
827          31.382531         NaN

df['Date'] = pd.to_datetime(df['Date'])

m = df['Date'].notna()
s = (~m).groupby(m.cumsum()).cumsum()
df['Date'] = df['Date'].ffill() + pd.to_timedelta(s, unit='d')
print (df)
    AmbientTemperatue       Date
818          31.237499 2020-03-28
819          32.865974 2020-03-29
820          32.032558 2020-03-30
821          31.671166 2020-03-31
822          31.389927 2020-04-01
823          31.243660 2020-04-02
824          31.206777 2020-05-08
825          31.241503 2020-05-09
826          31.309531 2020-05-10
827          31.382531 2020-05-11