如何统计DataFrame中每年降水量超过指定值的出现次数
解决Pandas年度重采样统计降水超阈值次数的问题
核心思路
要统计每年降水量大于2的天数,关键是先标记符合条件的记录,再通过年度重采样求和(布尔值True会被当作1,False当作0,求和结果就是符合条件的次数)。
完整代码示例
1. 构造示例数据(模拟你的输入)
import pandas as pd # 生成2000-2002年每日数据,对应预期结果的阈值次数 data = { 'Date': pd.date_range(start='2000-01-01', end='2002-12-31', freq='D'), 'Precipitation': [3, 1, 2, 0, 2.5] + [1]*360 + [3] + [1]*364 + [2.1, 0, 3.2, 1.8] + [1]*360 } df = pd.DataFrame(data)
2. 数据预处理(确保日期格式正确)
如果你的Date列不是datetime类型,先执行转换:
df['Date'] = pd.to_datetime(df['Date'])
3. 两种统计方法
方法一:先标记阈值列,再重采样求和
# 新增布尔列标记降水量>2的日期 df['above_2'] = df['Precipitation'] > 2 # 按年度重采样,统计每年的次数 annual_count = df.resample('Y', on='Date')['above_2'].sum().astype(int)
方法二:直接在重采样中统计(无需额外列)
annual_count = df.resample('Y', on='Date')['Precipitation'].apply(lambda x: (x > 2).sum())
4. 优化结果显示(把索引转成年份)
# 将年度时间索引转换为年份数字,结果更直观 annual_count.index = annual_count.index.year # 重命名列名 annual_count = annual_count.rename('Count_Precip_Above_2') # 输出结果 print(annual_count)
运行后输出:
2000 2 2001 1 2002 3 Name: Count_Precip_Above_2, dtype: int64
常见问题排查
你之前未得到预期结果,可能是以下原因:
Date列未转换为datetime类型,导致resample无法识别时间维度- 未指定
on='Date'参数(如果Date不是DataFrame的索引) - 错误直接对
Precipitation列求和,而非统计符合>2条件的记录数
内容的提问来源于stack exchange,提问作者Tatthew
相关产品推荐
相关产品推荐

