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

如何利用Pandas从日期时间型DataFrame中提取各年度最高温度?

解决方法:按年份提取最高温度

嘿,作为Python新手,你其实不用手动遍历年份列表这么麻烦——Pandas本身就有非常简洁的分组方法来搞定这个需求!我来一步步给你讲清楚:

最优方案:使用groupby直接分组计算

这是最简洁高效的方式,一行代码就能得到每年的最高温度:

import pandas as pd

# 按年份分组,计算每组的最高温度
yearly_max_temp = df.groupby(df['Date'].dt.year)['Average Daily Value'].max()

# 如果想转换成更直观的DataFrame格式
yearly_max_temp = yearly_max_temp.reset_index(name='Max Temperature (°C)')

这段代码的逻辑很清晰:

  • df['Date'].dt.year提取出每条记录的年份
  • groupby()按年份把数据分成18个组(对应1990-2018)
  • 对每个组的Average Daily Value列调用max(),得到该年份的最高温
  • reset_index()把结果转换成标准的DataFrame结构,方便查看和后续处理

如果需要获取最高温对应的具体日期

如果你还想知道每年的最高温是哪一天出现的,可以用idxmax()获取对应行的索引,再用loc提取整行数据:

# 获取每年最高温对应的完整记录
yearly_max_details = df.loc[df.groupby(df['Date'].dt.year)['Average Daily Value'].idxmax()]

# 可以选择只保留需要的列
yearly_max_details = yearly_max_details[['Date', 'Average Daily Value']].rename(columns={'Average Daily Value': 'Max Temperature (°C)'})

为什么你的循环会得到全局最高值?

你之前的问题应该出在循环里没有过滤对应年份的数据。比如错误的写法可能是这样的:

# 错误示例:没有筛选当前年份,取了全局最大值
years = sorted(set(df['Date'].dt.year.to_list()))
max_temps = []
for y in years:
    # 这里直接取了整个数据集的max,而不是当前年份的
    max_temp = df['Average Daily Value'].max()
    max_temps.append(max_temp)

如果一定要用循环实现(虽然不推荐,效率不如groupby),正确的写法应该是先筛选出当前年份的数据,再取最大值:

years = sorted(set(df['Date'].dt.year.to_list()))
yearly_max = {}

for year in years:
    # 筛选出当前年份的所有记录
    current_year_data = df[df['Date'].dt.year == year]
    # 计算该年份的最高温
    current_max = current_year_data['Average Daily Value'].max()
    yearly_max[year] = current_max

# 转换成DataFrame
yearly_max_df = pd.DataFrame(yearly_max.items(), columns=['Year', 'Max Temperature (°C)'])

总结

优先用groupby的方法,不仅代码简洁,而且Pandas的分组操作是经过优化的,处理大数据时比手动循环快很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:47:43