[英]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_index
和end_index
之間填充日期(並將這些日期的 NaN 填充為 PRCP、TMIN、TMAX、TAVG),但即便如此,我最終還是會丟失一些日期,即計數不等於 365。
例如,如果源文件有從 10 月 1 日到 10 月 28 日的數據,上面將添加此范圍之間的任何缺失日期,但不會將 29、30、31 添加到數據集。
有沒有一種方法可以為我的City
列中的所有城市估算從1 Jan
到 12 月31 Dec
的所有日期(年份無關緊要並忽略閏年)。
可以通過在 GroupBy.apply 中使用自定義 function 和DataFrame.reindex
在GroupBy.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.