我有一个极地数据框,其中包含不同的气象站及其数据。最终目标是时间序列分析。但是,某些温度值是空白的。为了不弄乱模型,我希望能够用其两侧两天的平均值来填补空白。我想在这个过程中以某种方式对气象站进行 group_by() 处理,以免获取一个气象站信息并将其用于另一个气象站缺失的日平均值。如果只有一个值(时间范围的开始或结束),那么我想使用与它旁边的日期相同的数字。
例如,
日期 | 气象站 | 温度 |
---|---|---|
2024-01-24 | A | 65 |
2024-01-25 | A | 无 |
2024-01-26 | A | 78 |
2024-01-24 | B | 无 |
2024-01-25 | B | 65 |
2024-01-26 | B | 78 |
所需的解决方案是:
日期 | 气象站 | 温度 |
---|---|---|
2024-01-24 | A | 74 |
2024-01-25 | A | 76 |
2024-01-26 | A | 78 |
2024-01-24 | B | 65 |
2024-01-25 | B | 65 |
2024-01-26 | B | 78 |
可以注意到,76 是它附近两天的 74 和 78 的平均值,在 2024-01-24 的情况下,B 是 65,因为没有之前的日期。我想要同样的反面(没有发布日期)[例如。如果是在 2024 年 1 月 27 日,weather_station B 没有,我希望该值为 78]
这是一个示例数据框:
data = {
'Date': ['2024-01-24', '2024-01-25', '2024-01-26', '2024-01-24', '2024-01-25', '2024-01-26'],
'Weather_Station': ['A', 'A', 'A', 'B', 'B', 'B'],
'Temp': [74, None, 78, None, 65, 78]
}
interpolate
,然后backward_fill
/forward_fill
over
您的小组:
(pl.DataFrame(data)
.with_columns(pl.col('Temp').interpolate()
.backward_fill().forward_fill()
.over('Weather_Station')
)
)
输出:
shape: (6, 3)
┌────────────┬─────────────────┬──────┐
│ Date ┆ Weather_Station ┆ Temp │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ f64 │
╞════════════╪═════════════════╪══════╡
│ 2024-01-24 ┆ A ┆ 74.0 │
│ 2024-01-25 ┆ A ┆ 76.0 │
│ 2024-01-26 ┆ A ┆ 78.0 │
│ 2024-01-24 ┆ B ┆ 65.0 │
│ 2024-01-25 ┆ B ┆ 65.0 │
│ 2024-01-26 ┆ B ┆ 78.0 │
└────────────┴─────────────────┴──────┘