You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas逐小时气象数据按天重采样时保留最大风速对应风向的方法

问题原因

你之前的代码是对windSpeedHigh和windSpeedHigh_Dir两列分别独立执行max()聚合:风速列取数值最大值符合预期,但风向列是按字符串字典序计算最大值,和当日最大风速没有关联,因此会出现匹配错误。

解决方案

方案1:用idxmax提取最大风速对应行(效率更高)

通过idxmax先定位每日最大风速对应的行索引,再提取对应行的风向和风速数据,最后补全无观测数据的日期:

import pandas as pd

# 原始数据预处理
df = pd.DataFrame({ 
    'date': ['2019-01-01 09:30:00', '2019-01-01 10:00', '2019-01-02 04:30:00','2019-01-02 05:00:00','2019-07-04 02:00:00'],
    'windSpeedHigh': [155,90,35,45,15],
    'windSpeedHigh_Dir':['NE','NNW','SW','W','S']
})
df['date'] = pd.to_datetime(df['date'])
df['windSpeedHigh'] = pd.to_numeric(df['windSpeedHigh'])

# 1. 取每日最大风速对应的行索引
max_speed_idx = df.resample('D', on='date')['windSpeedHigh'].idxmax()
# 2. 过滤无观测数据的空索引
max_speed_idx = max_speed_idx.dropna().astype(int)
# 3. 提取对应行数据,补全全量日期
df_daily = df.loc[max_speed_idx].set_index('date').resample('D').asfreq()

运行后df_daily的输出如下,风向和最大风速匹配正确:

windSpeedHigh windSpeedHigh_Dir
date                                                
2019-01-01                     155                NE
2019-01-02                      45                 W
2019-01-03                     NaN               NaN
2019-01-04                     NaN               NaN
...                            ...               ...
2019-07-03                     NaN               NaN
2019-07-04                      15                 S

方案2:groupby+apply(灵活度更高)

如果需要自定义更多聚合逻辑,可以用分组自定义函数实现:

def get_daily_max(group):
    # 返回分组内风速最大的第一行数据
    return group.loc[group['windSpeedHigh'].idxmax()]

df_daily = df.set_index('date').groupby(pd.Grouper(freq='D')).apply(get_daily_max)

注意:如果单日存在多条相同最大风速的记录,上述两种方法都会默认取时间最早的那条,如需保留所有最大风速记录,可以调整逻辑返回所有匹配行。

内容的提问来源于stack exchange,提问作者Jordan Ford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:30:05