将缺失的日期添加到时间序列数据框

时间:2021-05-22 13:11:20

标签: python pandas datetime time

我有一个时间序列数据框,其中包含多个城市的年度温度值,但对于一些城市,我缺少一组日期

数据框示例

ID      Date        City    PRCP    TAVG    TMAX    TMIN
abcd1   2020-01-01  Zurich  0       -1.9    -0.9    -2.9
abcd1   2020-01-02  Zurich  9.1      8.8    12.7    4.9
abcd1   2020-01-03  Zurich  0.8      8.55   13.2    3.9
abcd1   2020-01-04  Zurich  0        4.1    10.8    -2.6

.
.
abcd9   2020-01-01 Singapore 4.1    5.9     0.3     3.1
abcd9   2020-01-04 Singapore 0.32   13.78   4.22    9   
abcd9   2020-01-28 Singapore 9.42   11.32   5.34    8.33
...

现在假设每个月都缺少一些日期,因此 Date 列中的总天数为 300 天。我想将剩余的天数添加到数据集中,并将 nulls(NaN) 分配给这些日期的 TMAX,TMIN.. 列,以便总天数为 365。

这就是我现在正在做的

df_list = []

for (columns, group) in df.groupby(['ID', 'City']):
    idx = pd.MultiIndex.from_product([group['ID'].unique(),
                                      pd.date_range(group['Date'].min().replace(day=1), end=group['Date'].max(), freq='D')],
                                     names=['ID', 'Date'])
    group = group.set_index(['ID', 'Date']).reindex(idx).reset_index()
    group['City'] = group['City'].fillna(method='bfill')
    df_list.append(group)

data = pd.concat(df_list, ignore_index=True)

这样做是在 start_indexend_index 之间填充日期(并将这些日期的 NaN 填充为 PRCP、TMIN、TMAX、TAVG),但即使如此,我最终还是遗漏了一些日期,即计数不等于 365。

例如,如果源文件有 10 月 1 日至 10 月 28 日的数据,则上述内容将添加此范围内的任何缺失日期,但不会将 29,30,31 添加到数据集。

有没有一种方法可以为我的 1 Jan 列中的所有城市估算从 31 DecCity(年份无关紧要,忽略闰年)的所有日期。

0 个答案:

没有答案