如何在Pandas中对Red DataFrame按小时、周、月进行数据聚合?
没问题,我来帮你搞定这个时间维度聚合的需求!咱们一步步来:
第一步:确保时间列是正确格式并设置为索引
首先得确认你的TimeStamp列是datetime类型,并且把它设为DataFrame的索引——这是Pandas处理时间序列聚合的基础。如果还没完成这一步,执行这段代码:
import pandas as pd # 转换TimeStamp列为datetime类型(如果还没转) Red['TimeStamp'] = pd.to_datetime(Red['TimeStamp']) # 将TimeStamp设置为索引 Red = Red.set_index('TimeStamp')
第二步:按不同时间维度聚合求和
Pandas的resample()方法专门用来处理时间序列的频率转换和聚合,非常适合你的需求,直接用它就能轻松实现小时、周、月维度的sum聚合:
1. 按小时聚合
# 按每小时分组,计算Red列的总和 red_hourly_sum = Red['Red'].resample('H').sum()
这里的'H'是Pandas的时间频率代码,代表“小时”,resample会自动把数据按每小时分组,然后对每组的Red值求和。
2. 按周聚合
# 默认每周从周一开始,计算每周的总和 red_weekly_sum = Red['Red'].resample('W').sum() # 如果你的业务逻辑里一周从周日开始,用这个: red_weekly_sum_sun_start = Red['Red'].resample('W-SUN').sum()
'W'是默认的周频率(周一为一周起始),'W-SUN'则指定周日作为一周的开始,根据你的需求选择即可。
3. 按月聚合
# 按每月最后一天为节点,计算每月总和 red_monthly_sum = Red['Red'].resample('M').sum() # 如果需要按每月第一天为起始节点,用这个: red_monthly_sum_start = Red['Red'].resample('MS').sum()
'M'代表月末频率,'MS'代表月初频率,两种方式可以根据业务场景灵活选择。
备选方案:不修改原索引的聚合方式
如果你不想改变原DataFrame的索引,也可以用groupby结合pd.Grouper来实现:
# 按小时聚合(不修改原索引) red_hourly_sum = Red.groupby(pd.Grouper(key='TimeStamp', freq='H'))['Red'].sum() # 按周聚合同理 red_weekly_sum = Red.groupby(pd.Grouper(key='TimeStamp', freq='W'))['Red'].sum()
这样就能完美实现你要的不同时间维度的sum聚合啦!
内容的提问来源于stack exchange,提问作者MAK
相关产品推荐
相关产品推荐

