簡體   English   中英

將缺失的日期添加到時間序列數據框

[英]Add missing dates to time series data-frame

我有一個時間序列 dataframe 具有多個城市的年度溫度值,但是對於一些城市,我缺少一組日期

Dataframe 示例

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 天。 我想將天數的 rest 添加到數據集,並將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 添加到數據集。

有沒有一種方法可以為我的City列中的所有城市估算從1 Jan到 12 月31 Dec的所有日期(年份無關緊要並忽略閏年)。

可以通過在 GroupBy.apply 中使用自定義 function 和DataFrame.reindexGroupBy.apply中添加缺失的日期,然后重新分配索引:

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

f = lambda x: x.reindex(pd.date_range(pd.to_datetime('2020-01-01'), pd.to_datetime('2020-12-31'), name='date'))
df = df.set_index('Date').groupby(['ID','City']).apply(f).drop(['ID','City'], axis=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM