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

如何统计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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:20:37