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

如何用Pandas计算指定日期前30天非节假日流量指数均值并合并到DataFrame

Pandas 实现同地点前30天非节假日流量均值计算

实现步骤

  1. 预处理数据:将日期列转为datetime格式,按地点和日期排序保证时序正确
  2. 标记非节假日流量:将节假日/周末的流量值置为空,方便均值计算时自动过滤
  3. 分组滚动计算:按地点分组后使用时间窗口滚动计算30天均值,排除当前日期
  4. 结果直接映射到原表:计算结果索引与原表对齐,直接作为新列赋值即可

完整代码

import pandas as pd

# 读取本地数据集
df = pd.read_csv("你的本地数据集路径.csv")

# 日期列转datetime格式
df["date"] = pd.to_datetime(df["date"])

# 按地点+日期升序排序,确保时序正确
df = df.sort_values(by=["location", "date"], ignore_index=True)

# 提取非节假日流量,节假日位置为NaN,计算均值时会自动忽略
df["non_holiday_flow"] = df["flow_index"].where(df["weekend_holiday"] == 0)

# 按地点分组,滚动计算前30天非节假日流量均值
df["30d_non_holiday_avg_flow"] = (
    df.groupby("location", group_keys=False)
    .apply(
        lambda x: x.set_index("date")["non_holiday_flow"]
        .rolling(window="30D", closed="left") # closed='left'表示不包含当前日期,仅统计往前30天
        .mean()
    )
    .reset_index(drop=True)
)

# 可选:删除中间生成的辅助列
df = df.drop(columns=["non_holiday_flow"])

参数说明

  • rolling(window="30D"):指定滚动窗口长度为30天,比固定行数的窗口更适配日期不连续的场景
  • closed="left":指定窗口仅包含左边界、不包含右边界(右边界为当前行日期),刚好匹配「当前日期往前恰好30天」的需求,若需要包含当前日期可删除该参数
  • 若同一地点同一天存在多条数据,可在排序前先按location和date聚合流量数据,聚合逻辑根据业务需求选择求和/均值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:00