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

Pandas滚动日期窗口求最频繁weather_type及平局处理技术问询

嘿,这个需求刚好可以用你熟悉的滑动窗口思路来解决!我来一步步给你拆解实现方法:

第一步:确保日期列是datetime类型并排序

首先得把你的日期列转成datetime格式,并且按日期排序——这一步非常关键,不然滑动窗口的范围会乱掉:

import pandas as pd

# 转换日期列格式
df['date'] = pd.to_datetime(df['date'])
# 按日期排序并重置索引
df = df.sort_values('date').reset_index(drop=True)

第二步:自定义处理平局的众数函数

我们需要一个函数,输入窗口内的weather_type序列,返回出现最频繁的值;如果多个值频率相同,就返回窗口内**最后出现(也就是最近)**的那个值:

def get_top_weather(series):
    # 统计窗口内各天气类型的出现次数
    count_stats = series.value_counts()
    # 找到最高出现频次
    max_count = count_stats.max()
    # 筛选出所有频次等于最大值的候选天气类型
    top_candidates = count_stats[count_stats == max_count].index.tolist()
    
    # 从窗口末尾往前找,第一个匹配候选的就是最近的那个
    for weather in reversed(series):
        if weather in top_candidates:
            return weather

第三步:滑动窗口应用函数

接下来就像你计算precipmm总和一样,用rolling窗口来应用这个函数:

# 方案1:如果日期是连续的,用固定窗口大小3(包含当天在内的过去3天)
df['most_freq_weather_3d'] = df['weather_type'].rolling(window=3, min_periods=1).apply(get_top_weather)

# 方案2:如果日期可能有缺失,用时间范围窗口(过去3天内的所有数据)
# 先把日期设为索引,应用窗口后再重置索引
df['most_freq_weather_3d'] = df.set_index('date')['weather_type'].rolling('3D', min_periods=1).apply(get_top_weather).reset_index(drop=True)

举个例子验证

假设你的数据是这样的:

data = {
    'date': pd.date_range(start='2024-01-01', periods=5),
    'weather_type': ['sunny', 'rainy', 'rainy', 'sunny', 'cloudy']
}
df = pd.DataFrame(data)

应用函数后得到的结果会是:

dateweather_typemost_freq_weather_3d
2024-01-01sunnysunny
2024-01-02rainyrainy
2024-01-03rainyrainy
2024-01-04sunnyrainy
2024-01-05cloudycloudy

注意点

  • min_periods=1是为了让前两行(不足3天的情况)也能返回结果,如果你不需要的话可以去掉,这时候前两行会显示NaN。
  • 用时间窗口'3D'时,会自动包含过去72小时内的所有数据,哪怕中间有日期缺失,比固定窗口更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:40:23