如何按周对DataFrame进行分组?附相关数据集详情
按周分组DataFrame的技术实现方案
没问题,我来帮你梳理针对这两个DataFrame的按周分组实现方案,分步骤说明,适配不同的需求场景:
前提准备:确保日期是datetime类型
不管是用索引还是列存储日期,首先得把它转换成pandas能识别的datetime格式,不然分组逻辑会出错:
- 针对第一个以
Date为索引的DataFrame(含Articles列):import pandas as pd # 假设你的第一个DataFrame命名为df_articles df_articles.index = pd.to_datetime(df_articles.index) - 针对第二个
Date为普通列的DataFrame(含Price列):# 假设你的第二个DataFrame命名为df_price df_price['Date'] = pd.to_datetime(df_price['Date'])
核心分组方案:两种常用方法
方法1:用resample(适合日期是索引的场景)
resample是pandas专门为时间序列设计的分组工具,用法简洁直观:
针对Articles DataFrame的分组聚合
因为你的Articles列是元组的元组,分组后通常需要合并每周的所有文本片段,或者统计条目数量:
# 合并每周所有的Articles元组(扁平化所有嵌套元组) weekly_articles = df_articles.resample('W').agg({ 'Articles': lambda x: tuple(item for sub_tuple in x for item in sub_tuple) }) # 或者统计每周的文章条目数量 weekly_article_count = df_articles.resample('W').size().rename('Weekly_Article_Count')
针对Price DataFrame的分组聚合
价格数据通常需要计算周均值、极值或者周最后一天的价格,示例如下:
# 先把Date设为索引 df_price.set_index('Date', inplace=True) # 按周聚合,同时计算多种统计值 weekly_price = df_price.resample('W').agg({ 'Price': ['mean', 'max', 'min', 'last'] # 周均价、最高价、最低价、最后一天价格 })
方法2:用groupby + Grouper(适合日期是普通列的场景)
如果不想改动DataFrame的索引结构,可以用pd.Grouper指定日期列和分组频率:
# 针对Price DataFrame的分组示例 weekly_price = df_price.groupby(pd.Grouper(key='Date', freq='W')).agg({ 'Price': ['mean', 'max', 'min', 'last'] }) # 针对Articles DataFrame,若后续把索引转成了普通列,也可以用同样逻辑 # weekly_articles = df_articles.groupby(pd.Grouper(key='Date', freq='W')).agg(...)
额外调整项
- 周起始日设置:默认
freq='W'是以周日为一周的结束日,如果需要以周一为起始/结束,可以改成freq='W-MON' - Articles聚合的自定义需求:如果需要对合并后的文本去重,可以修改lambda函数:
lambda x: tuple(set(item for sub_tuple in x for item in sub_tuple)) - 合并两个分组结果:如果需要把每周的文章和价格数据放在一起分析,可以合并两个分组后的DataFrame:
weekly_combined = pd.merge(weekly_articles, weekly_price, left_index=True, right_index=True)
内容的提问来源于stack exchange,提问作者Talal Zahid
相关产品推荐
相关产品推荐

