Python-Polars:如何用两者之间的平均值填充 NA?

问题描述 投票:0回答:1

我有一个极地数据框,其中包含不同的气象站及其数据。最终目标是时间序列分析。但是,某些温度值是空白的。为了不弄乱模型,我希望能够用其两侧两天的平均值来填补空白。我想在这个过程中以某种方式对气象站进行 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]
}
python dataframe group-by aggregate python-polars
1个回答
0
投票

您可以

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 │
└────────────┴─────────────────┴──────┘
© www.soinside.com 2019 - 2024. All rights reserved.