如何使用Pandas按指定天数间隔分组时间戳并统计各类标签数量
Pandas按自定义天数间隔分组统计标签数量方案
原始数据集说明
数据集包含用户名称、创建日期、标签三个字段,其中created日期列非连续,样例如下:
name created label 0 leahbirdjohnso2 2020-02-20 PATRIOTSAWAKENED 1 leahbirdjohnso2 2020-02-21 TRUMP2020 2 carol2busy 2020-02-23 TRUMP2020 3 carol2busy 2020-02-24 TRUMP2020 4 GODRUS 2020-02-25 FOXNEWS
需求说明
支持自定义时间间隔(如2天、3天、7天等),按时间窗口分组后,统计每个窗口内各标签的出现次数,不同间隔的预期输出样例如下:
- 间隔为2天的预期输出:
created counts label 2020-02-20 1 PATRIOTSAWAKENED 1 TRUMP2020 2020-02-23 1 TRUMP2020 2020-02-24 1 FOXNEWS 1 TRUMP2020
- 间隔为3天的预期输出:
created counts label 2020-02-20 1 PATRIOTSAWAKENED 1 TRUMP2020 2020-02-23 2 TRUMP2020 1 FOXNEWS
实现代码
import pandas as pd # 数据预处理:将created列转为日期类型,这一步必须做,避免日期运算报错 df['created'] = pd.to_datetime(df['created']) # 自定义间隔天数,可按需修改为7、15等任意值 interval_days = 3 # 按时间间隔+标签分组统计 res = (df # 时间窗口从数据集最早日期开始计算,按指定天数划分 .groupby([pd.Grouper(key='created', freq=f'{interval_days}D', origin='start'), 'label']) # 统计每组行数即为标签出现次数 .size() .reset_index(name='counts') ) # 可选:调整显示格式,和示例输出保持一致,重复日期只显示一次 res['created'] = res['created'].dt.strftime('%Y-%m-%d') res.loc[res['created'].duplicated(), 'created'] = '' # 输出结果 print(res)
逻辑说明
pd.Grouper是Pandas原生的时间分组工具,直接支持传入nD格式的自定义天频率,无需手动计算时间区间origin='start'参数指定时间窗口的起始点为数据集最早的日期,保证分组逻辑和示例完全匹配- 最终得到的结果可直接用于后续分析,可选的格式处理仅为了对齐示例的展示效果,不影响统计结果准确性
内容的提问来源于stack exchange,提问作者olo
相关产品推荐
相关产品推荐

