如何按指定工作日分组,拆分工作日与周末并计算各小时均值?
实现方法
核心思路是利用Pandas datetime类型自带的星期属性,拆分工作日/周末数据后分别按小时聚合统计,具体实现如下:
前置说明
Pandas中datetime类型的weekday/dayofweek属性规则:返回值0对应周一、1对应周二...4对应周五、5对应周六、6对应周日,直接用该字段做筛选条件即可。
代码实现
情况1:datetime已经设为DataFrame索引(适配你现有写法)
import pandas as pd import numpy as np # 拆分工作日(周一至周五)、周末子集 weekday_df = df[df.index.weekday < 5] weekend_df = df[df.index.weekday >= 5] # 分别按小时计算均值、标准差,和你原有写法逻辑完全兼容 weekday_hourly_stats = weekday_df.groupby(lambda idx: idx.hour).agg([np.mean, np.std]) weekend_hourly_stats = weekend_df.groupby(lambda idx: idx.hour).agg([np.mean, np.std])
情况2:datetime是普通列,未设为索引
import pandas as pd import numpy as np # 先把datetime列转为标准时间类型,带时区的数据也支持 df['datetime'] = pd.to_datetime(df['datetime']) # 提取星期、小时字段 df['weekday_flag'] = df['datetime'].dt.weekday df['hour'] = df['datetime'].dt.hour # 分别统计 weekday_hourly_stats = df[df['weekday_flag'] < 5].groupby('hour')['value'].agg([np.mean, np.std]) weekend_hourly_stats = df[df['weekday_flag'] >= 5].groupby('hour')['value'].agg([np.mean, np.std])
最终得到的weekday_hourly_stats就是工作日各小时的统计结果,weekend_hourly_stats是周末各小时的统计结果,结构和你之前得到的全时段统计结果完全一致。
内容的提问来源于stack exchange,提问作者user16511234
相关产品推荐
相关产品推荐

