You need to enable JavaScript to run this app. 如何基于date列30分钟间隔用Pandas聚合Reddit GME帖子数据
优惠活动
大模型
产品
解决方案
定价
更多

如何基于date列30分钟间隔用Pandas聚合Reddit GME帖子数据

按30分钟间隔聚合GME帖子数据集的Pandas实现方案

前置准备:转换时间字段

必须先将date字段转换为Pandas可识别的datetime格式,否则无法执行时间聚合操作:

import pandas as pd

# 读入数据集(json格式数据对应替换为pd.read_json即可)
df = pd.read_csv("你的GME帖子数据集路径.csv")

# 转换date为datetime类型,异常时间自动设为NaT
df["date"] = pd.to_datetime(df["date"], errors="coerce")
# 剔除时间无效的行
df = df.dropna(subset=["date"])

核心聚合方案(两种实现按需选择)

方案1:resample标准时间重采样(适合中小数据集,自动生成连续时间索引)

resample是时间序列聚合的标准工具,可自动补全无帖子的空窗口,生成的连续时间索引可直接适配时间序列分析场景:

agg_df = df.resample(
    rule="30T",  # 指定聚合窗口为30分钟,新版Pandas也可写"30min"
    on="date",   # 指定聚合依据的时间列,无需修改原表索引
    origin="start_day",  # 从自然日0点开始划分窗口(如00:00-00:30、00:30-01:00),无需该规则可删除
    label="right"  # 窗口标签默认取窗口结束时间(如10:00-10:30的窗口标签为10:30),要取窗口起点可改为"left"
).agg(
    帖子数=("id", "nunique"),  # 统计窗口内唯一帖子数(用Reddit帖子唯一id去重)
    总得分=("score", "sum"),    # 窗口内所有帖子的score总和
    平均得分=("score", "mean"),  # 窗口内帖子的平均score
    帖子内容合集=("post", lambda x: list(x))  # 需保留窗口内所有帖子原文可保留,不需要可删除
)

# 可选:空窗口的数值指标补0,适配时间序列模型输入
agg_df[["帖子数", "总得分", "平均得分"]] = agg_df[["帖子数", "总得分", "平均得分"]].fillna(0)

方案2:时间分桶+groupby(适合超大规模数据集,性能更高)

如果数据集行数超过百万级、resample运行性能较低时,可先将每个帖子的时间映射到所属30分钟窗口,再用groupby聚合:

# 生成每个帖子对应的30分钟窗口起点(要从自然日0点划分就加origin="start_day",不需要可删除)
df["time_window"] = df["date"].dt.floor("30T", origin="start_day")

agg_df = df.groupby("time_window").agg(
    帖子数=("id", "nunique"),
    总得分=("score", "sum"),
    平均得分=("score", "mean")
)

常用调整说明

  • 窗口自定义:如果需要从固定时间点开始划分30分钟段(而非自然日0点),在resample/dt.floor中传入origin="你的指定时间点"即可,比如origin="2020-01-01 13:00"。
  • 时区处理:如果date字段带时区信息,转datetime时可传入tz="UTC"统一为UTC时区,避免跨时区偏移问题。
  • 空窗口处理:若不需要保留无帖子的空时间段,直接用方案2即可;用方案1的话加agg_df = agg_df.dropna()删除空窗口行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 17:27:02