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

如何用Pandas找出各数据记录器湿度/温度最高值的年份并统计数量

问题分析

你的代码逻辑错误在于,groupby('logger')['year', trait].max()会分别对year和trait列取最大值——这两个最大值并不一定来自同一条记录(比如某个记录器的最晚年份是1995,但它的最高湿度可能出现在1990年),因此无法正确定位每个记录器对应特征最高值的年份。

正确实现步骤

  1. 对每个记录器,找出其平均湿度/温度最高的所有年份(支持并列最高的场景)
  2. 统计每个年份被多少个记录器列为最高特征值的年份
  3. 将统计结果合并到目标年份DataFrame中

完整代码

import pandas as pd

# 假设原DataFrame结构为:logger, year, avg_humidity, avg_temp
# 1. 统计各年份成为最高平均湿度的记录器数量
max_humidity = df.groupby('logger')['avg_humidity'].transform('max')
humidity_top_rows = df[df['avg_humidity'] == max_humidity]
humidity_count = humidity_top_rows.groupby('year')['logger'].nunique().reset_index(
    name='count_avg_humidity'
)

# 2. 统计各年份成为最高平均温度的记录器数量,逻辑同上
max_temp = df.groupby('logger')['avg_temp'].transform('max')
temp_top_rows = df[df['avg_temp'] == max_temp]
temp_count = temp_top_rows.groupby('year')['logger'].nunique().reset_index(
    name='count_avg_temp'
)

# 3. 合并到目标年份DataFrame
df_years = pd.DataFrame({'year': list(range(1985, 1996))})
final_df = df_years.merge(humidity_count, on='year', how='left') \
                   .merge(temp_count, on='year', how='left') \
                   .fillna(0)

# 可选:将浮点类型的计数转为整数
final_df[['count_avg_humidity', 'count_avg_temp']] = final_df[['count_avg_humidity', 'count_avg_temp']].astype(int)

print(final_df)

代码说明

  • transform('max'):为每个记录器的每一行添加该记录器对应的最高特征值,方便后续筛选符合条件的年份
  • nunique():确保同一个记录器如果在多个年份并列最高,每个年份都会被统计一次,但同一年份下同一个记录器不会重复计数
  • fillna(0):处理没有记录器将该年份列为最高值的情况,用0填充缺失值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:17:40