气象数据时间频率从3小时转1小时的高效实现方案问询
问题:补全多城市气象数据的小时间隔并填充缺失值
数据背景
我有多城市、大样本量的气象数据,当前数据时间间隔为3小时,字段包括date、hour、city、condition、snow、rain,前3行数据如下:
| date | hour | city | condition | snow | rain |
|---|---|---|---|---|---|
| 2023-01-30 | 3 | berlin | snow | 1 | 0 |
| 2023-01-30 | 6 | berlin | rain | 0 | 1 |
| 2023-01-30 | 9 | berlin | clear | 0 | 0 |
需求目标
需要补全缺失的小时行,并用最邻近的同date、city的数值填充,目标DataFrame如下:
| date | hour | city | condition | snow | rain |
|---|---|---|---|---|---|
| 2023-01-30 | 3 | berlin | snow | 1 | 0 |
| 2023-01-30 | 4 | berlin | snow | 1 | 0 |
| 2023-01-30 | 5 | berlin | snow | 1 | 0 |
| 2023-01-30 | 6 | berlin | rain | 0 | 1 |
| 2023-01-30 | 7 | berlin | rain | 0 | 1 |
| 2023-01-30 | 8 | berlin | rain | 0 | 1 |
| 2023-01-30 | 9 | berlin | clear | 0 | 0 |
| 2023-01-30 | 10 | berlin | clear | 0 | 0 |
| 2023-01-30 | 10 | berlin | clear | 0 | 0 |
尝试过的无效方案
我试过以下代码,不仅没得到正确结果,而且处理大数据量时效率极低:
df_expanded = df.set_index(['date', 'city', 'condition']) .hour.unstack().reset_index().melt(id_vars=['date', 'city', 'condition'], value_name='hour') .dropna() .drop(columns=['variable']) df_expanded = df_expanded.sort_values(by=['date', 'city', 'condition', 'hour']) .ffill() result = df_expanded.merge(df, on=['date', 'city', 'condition', 'hour'], how='left') .dropna() .drop_duplicates()
寻求解决方案
需要一个更简单、高效的处理方案,适配大样本量的多城市数据场景。
内容的提问来源于stack exchange,提问作者Datalearner
相关产品推荐
相关产品推荐

