如何将高频每日数据按周拆分,按月计算每周AM/PM平均值?
解决方案:按周拆分并计算每月内每周时段平均值
用Python的pandas库可以高效处理这类时间序列统计需求,以下是具体步骤和代码:
1. 导入工具并读取数据
先导入pandas,然后读取你的时间序列数据,注意指定日期格式为DD/MM/YYYY HH:MM:
import pandas as pd # 读取数据(替换为你的文件路径或数据源) df = pd.read_csv('your_data.csv', parse_dates=['Date'], dayfirst=True) # 确保日期列是datetime类型(避免自动解析错误) df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
2. 提取关键时间特征
为了实现按「每月-每周-时段」分组,需要从日期中提取三个核心特征:
# 生成「年-月」标识(用于按月份范围分组) df['year_month'] = df['Date'].dt.to_period('M') # 计算每月内的周序号(1-5周,1-7号为第1周,8-14号为第2周,以此类推) df['month_week'] = df['Date'].dt.day.apply(lambda x: (x - 1) // 7 + 1) # 标记时段:0-11点为AM,12-23点为PM df['period'] = df['Date'].dt.hour.apply(lambda x: 'AM' if x < 12 else 'PM')
如果需要按自然ISO周(而非每月内的周段)统计,只需替换周数提取逻辑:
# 提取ISO标准的年和周数(跨月的周会归属到对应ISO年) df['iso_year'] = df['Date'].dt.isocalendar().year df['iso_week'] = df['Date'].dt.isocalendar().week
3. 分组计算平均值
根据提取的特征分组,计算每个组的Value平均值:
按每月内周段统计
# 按「年-月」「每月内周数」「时段」分组求均值 result = df.groupby(['year_month', 'month_week', 'period'])['Value'].mean().reset_index()
按自然ISO周统计
# 按「年-月」「ISO年」「ISO周」「时段」分组求均值 result = df.groupby(['year_month', 'iso_year', 'iso_week', 'period'])['Value'].mean().reset_index()
4. 可选:处理缺失值
如果数据存在缺失的Value,可以先清理再计算:
# 删除Value为空的行 df = df.dropna(subset=['Value'])
输出的result就是你需要的统计结果,包含每个月范围内每周AM/PM的平均值。
内容的提问来源于stack exchange,提问作者Lina Lathifah Nurazizah
相关产品推荐
相关产品推荐

