能否通过Pandas的resample方法按星期时段聚合Excel数据?
使用Pandas处理Excel数据:按星期时分分组聚合的实现方案
嘿,这个需求完全可以搞定!其实用groupby结合日期格式化会是最直接的方案,不过你问的resample也能实现,我给你一步步拆解:
第一步:读取并预处理数据
首先我们要把Excel里的Date字段解析成Pandas的datetime类型,这样才能方便后续的日期格式化操作:
import pandas as pd # 读取Excel文件,自动解析Date列为datetime类型 df = pd.read_excel('your_data.xlsx', parse_dates=['Date'])
第二步:生成「星期几 时分」格式的Week Time列
接下来我们把Date字段转换成你需要的格式,这里分两种情况:
- 如果需要英文星期(比如"Tuesday 10:40"):
df['Week Time'] = df['Date'].dt.strftime('%A %H:%M')
- 如果需要中文星期(比如"星期二 10:40"),需要先设置本地化环境:
import locale # Windows系统用'Chinese_Simplified',Linux/macOS可调整为'zh_CN.UTF-8' locale.setlocale(locale.LC_TIME, 'Chinese_Simplified') df['Week Time'] = df['Date'].dt.strftime('%A %H:%M')
方案一:用groupby实现分组聚合(推荐)
这是最贴合你需求的方式,直接按生成的Week Time列分组,然后聚合sum、count、avg三个指标:
# 聚合计算:sum是count字段的总和,record_num是记录条数,avg_count是count字段的平均值 agg_result = df.groupby('Week Time').agg( total_count=('count', 'sum'), record_num=('count', 'size'), avg_count=('count', 'mean') ).reset_index() # 查看最终结果 print(agg_result)
运行后你就能得到每个「星期几 时分」对应的三个统计指标了。
方案二:用resample实现(进阶技巧)
resample本身是针对时间间隔的重采样(比如按小时、按周),但我们可以通过一些技巧让它适配你的需求:
- 先把Date列的“年/月/日”部分替换成固定值,只保留星期和时分的信息(比如把所有日期都映射到某一周的对应星期几,这样同一星期几同一时分的记录就会被归为同一个时间点)
- 把处理后的时间设为索引,再用resample按分钟级重采样,最后聚合指标:
# 构造一个固定基准的datetime,保留原日期的星期和时分信息 df['resample_time'] = pd.to_datetime('2023-01-01') + \ df['Date'].dt.dayofweek.days + \ df['Date'].dt.time.apply(lambda x: pd.Timedelta(hours=x.hour, minutes=x.minute)) # 设置索引并执行resample聚合 resample_result = df.set_index('resample_time').resample('T').agg( total_count=('count', 'sum'), record_num=('count', 'size'), avg_count=('count', 'mean') ).reset_index() # 把resample_time转成「星期几 时分」格式,去掉多余列 resample_result['Week Time'] = resample_result['resample_time'].dt.strftime('%A %H:%M') resample_result = resample_result.drop('resample_time', axis=1) # 查看结果 print(resample_result)
不过要注意,这种方法其实是绕了个弯,不如groupby直接高效,所以更推荐第一种方案。
内容的提问来源于stack exchange,提问作者Morteza Jalambadani
相关产品推荐
相关产品推荐

