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

从Pandas DataFrame中按复杂条件筛选极端高温值

Pandas实现极端高温标记的简洁方案

需求规则

为包含日期和日最高温的Pandas DataFrame添加extreme_highs列,标记规则如下:

  • 未标记的条目值设为0
  • 仅高于40℃的温度具备标记资格
  • 从最早日期开始遍历:
    1. 找到首个符合资格的日期,以该日期为起点取包含自身在内的4天窗口
    2. 标记窗口内温度最高的日期(若有多个最高值,选最早出现的)
    3. 标记完成后,跳过后续6天,每7天周期仅标记1次

示例数据集

import pandas as pd

data_dict = {
    'dates': ['2023-07-01', '2023-07-02', '2023-07-03', '2023-07-04', '2023-07-05', '2023-07-06', '2023-07-07', '2023-07-08', '2023-07-09', '2023-07-10', '2023-07-11', '2023-07-12', '2023-07-13', '2023-07-14', '2023-07-15', '2023-07-16', '2023-07-17', '2023-07-18', '2023-07-19', '2023-07-20', '2023-07-21', '2023-07-22', '2023-07-23', '2023-07-24', '2023-07-25', '2023-07-26', '2023-07-27', '2023-07-28', '2023-07-29', '2023-07-30', '2023-07-31', '2023-08-01', '2023-08-02'],
    'daily_high_temp': [39.1, 39.8, 40, 40.3, 40.4, 40.2, 40.4, 40.6, 41, 41.1, 40.9, 41.2, 40.9, 39.9, 41.2, 42, 42.3, 41.9, 40.7, 39.8, 41.1, 41.3, 40.9, 40.7, 40, 39.8, 41.2, 40.9, 39.6, 40.9, 41.4, 41.2, 41.4]
}
df = pd.DataFrame(data=data_dict)
# 转换日期列为datetime类型,确保时间顺序正确
df['dates'] = pd.to_datetime(df['dates'])

实现代码

# 初始化标记列
df['extreme_highs'] = 0
current_idx = 0
total_rows = len(df)

while current_idx < total_rows:
    # 筛选当前位置及之后的合格温度(>40℃)
    eligible_mask = (df['daily_high_temp'] > 40) & (df.index >= current_idx)
    eligible_indices = df[eligible_mask].index
    
    if eligible_indices.empty:
        break  # 无合格数据,终止循环
    
    # 取第一个合格索引作为窗口起点
    window_start = eligible_indices[0]
    # 确定窗口终点(最多包含4天)
    window_end = min(window_start + 3, total_rows - 1)
    # 截取窗口数据
    window_data = df.loc[window_start:window_end]
    
    # 找到窗口内最高温的最早出现位置
    max_temp_value = window_data['daily_high_temp'].max()
    mark_index = window_data[window_data['daily_high_temp'] == max_temp_value].index[0]
    
    # 标记该位置的温度值
    df.loc[mark_index, 'extreme_highs'] = df.loc[mark_index, 'daily_high_temp']
    
    # 跳过后续6天,下一轮从标记索引+7开始
    current_idx = mark_index + 7

代码说明

  1. 日期预处理:将dates转为datetime类型,避免字符串排序导致的逻辑错误。
  2. 循环遍历逻辑:
    • 每次从当前索引开始,筛选出所有符合温度要求的条目,取第一个作为窗口起点。
    • 生成包含起点的4天窗口,找到窗口内最高温的最早出现位置并标记。
    • 标记完成后直接跳转到标记索引+7,严格遵守"每7天仅标记1次"的规则。
  3. 边界处理:窗口终点不超过DataFrame最后一行,无合格数据时自动终止循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:40:13