pandas: DataFrame 将时间按小时分钟等方式聚合
前言
在实际应用过程中,会出现不少时间序列相关数据,为了让不同频率数据统一时间标准,需要将数据按小时、分钟等方式进行分组,然后取组的平均值或中位数最为组的值,如果自己写算法会比较麻烦且耗时,pandas提供了一个函数可以快速解决此类问题:DataFrame.resample()。
提示:为方便快捷地解决问题,本文仅介绍函数的主要用法,并非全面介绍
一、DataFrame.resample()是什么?
DataFrame.resample()函数是频率转换和时间序列重采样的便捷方法。对象必须具有datetime类似的索引。
二、DataFrame.resample()函数参数及说明
DataFrame.resample(rule, axis=0, closed=None, label=None, convention=‘start’, kind=None, loffset=None, base=None, on=None, level=None, origin=‘start_day’, offset=None)
主要参数说明
rule:DateOffset、Timedelta或str。表示目标转换的偏移量字符串或对象。
axis:{0 or ‘index’, 1 or ‘columns’}, 默认0。用于上采样或下采样的轴。对于Series,它将默认为0,即沿着行计算。必须为 DatetimeIndex,TimedeltaIndex或PeriodIndex。
closed:{‘right’, ‘left’}, 默认值None。用于标记存储桶的容器边缘标签。除“ M”,“ A”,“ Q”,“ BM”,“ BA”,“ BQ”和“ W”外,所有频率偏移的默认值均为“ left”,均默认为“ right”。
label:{‘right’, ‘left’}, 默认值None。用于标记存储桶的容器边缘标签。除“ M”,“ A”,“ Q”,“ BM”,“ BA”,“ BQ”和“ W”外,所有频率偏移的默认值均为“ left”,均默认为“ right”。
convention:{‘start’, ‘end’, ‘s’, ‘e’}, 默认为’start’。仅对于PeriodIndex,控制是否使用相应规则的开始或结束。
kind:{‘timestamp’, ‘period’}, optional, 默认None。传递’timestamp’将结果索引转换为DateTimeIndex,或传递’ period’将其转换为PeriodIndex。默认情况下,输入表示形式将保留。
loffset:timedelta, 默认None。调整重新采样的时间标签。
base:int,默认为0。对于平均细分为1天的频率,则是汇总间隔的“起点”。例如,对于“ 5min”频率,基数范围可以从0到4。默认值为0。
on:str,optional。对于DataFrame,使用列而不是索引进行重采样。列必须是类似日期时间的。
level:str或int, optional。对于MultiIndex,用于重采样的级别(名称或数字)。级别必须类似于日期时间。
origin:{‘epoch’,‘start’,‘start_day’},Timestamp或str,默认为’start_day’。调整分组的时间戳。原始时区必须与索引的时区匹配。
offset:Timedelta或str,默认为None。向原点添加偏移时间增量。
使用函数聚合时间数据
代码如下(示例):
#按1小时聚合,取平均值
df.resample(rule = '1H').mean()
#按1分钟聚合,取最大值
df.resample(rule = '1T').max()
rule 的主要参数选择见如下表格
规则 | 参数 |
---|---|
天 | ‘D’ |
小时 | ‘H’ |
分钟 | ‘T’ or ‘min’ |
秒 | ‘S’ |
可以根据实际需求进行调整和组合,更多rule的值请参考网址。
总结
本文仅展示快速将时间按小时分钟等方式聚合的方法,希望能帮助到大家。