如何在DataFrame中筛选出5个不同日期的最高气温记录?
提取逐小时气温数据中Top5最高温的不同日期
核心问题分析
直接用nlargest(5, 'temp')会返回同一天内的多条小时记录(因为当天最高温的小时可能有多个,或该天的最高温远高于其他天),导致结果全是同一日期。解决关键是先按日期聚合计算每日最高温,再从日最高温中筛选Top5日期。
具体解决方案(基于Pandas)
假设你的数据集包含:
datetime:datetime类型的逐小时时间戳列temp:气温数值列
步骤1:提取日期字段(若无双独日期列)
如果原数据只有完整时间戳,先提取日期部分作为单独列:
import pandas as pd # 读取数据集(替换为你的文件路径) df = pd.read_csv('temperature_data.csv') # 将时间戳列转为datetime类型(未转换时执行) df['datetime'] = pd.to_datetime(df['datetime']) # 提取纯日期部分 df['date'] = df['datetime'].dt.date
步骤2:按日期聚合计算每日最高温
分组后取每天的最高气温,得到每个日期对应的最高温数据:
# 按日期分组,计算每日最高温 daily_max_temp = df.groupby('date')['temp'].max().reset_index()
步骤3:筛选Top5最高温的不同日期
从日最高温数据中取前5个最大值对应的日期:
# 获取Top5最高温的日期列表 top5_dates = daily_max_temp.nlargest(5, 'temp')['date'].tolist() # 若需保留对应的最高温时间记录: # 先标记每条记录是否为当日最高温 df['is_daily_max'] = df['temp'] == df.groupby('date')['temp'].transform('max') # 筛选每日最高温记录并去重日期(同一天多时段同温时只留一条) daily_max_records = df[df['is_daily_max']].drop_duplicates('date') # 取前5条完整记录 top5_full_records = daily_max_records.nlargest(5, 'temp')
关键说明
groupby('date')['temp'].max():确保每个日期仅保留一个最高温值,避免同一天的多条记录干扰结果drop_duplicates('date'):若同一天多时段达到最高温,仅保留一条记录(可根据需求移除该步骤保留所有同温时段)- 若你的日期列已是单独字符串格式(如
'2023-01-01'),可跳过步骤1直接分组计算
内容的提问来源于stack exchange,提问作者whitebeard
相关产品推荐
相关产品推荐

