如何按DataFrame时间戳列的5分钟间隔求Price列平均值并保留其他列
按5分钟间隔计算Price均值并保留其他列的解决方案
嘿,这需求很常见,我给你两种简单的实现方式,都能完美满足你的要求:
方法一:使用resample(推荐,适合时间序列场景)
首先我们可以把Event time列设置为DataFrame的索引,然后用resample按5分钟间隔分组,同时指定每列的聚合规则——Price列求均值,其他列(比如Event type和Ignore)如果在每个时间组里值是一致的,直接取组内第一个值就好:
# 将Event time设为索引 df = df.set_index('Event time') # 按5分钟重采样,聚合各列 result_df = df.resample('5T').agg({ 'Price': 'mean', 'Event type': 'first', 'Ignore': 'first' }).reset_index()
方法二:使用pd.Grouper(无需修改原索引)
如果不想改动原DataFrame的索引结构,可以用pd.Grouper指定时间列和分组频率,同样搭配agg来定义各列的处理逻辑:
result_df = df.groupby(pd.Grouper(key='Event time', freq='5T')).agg({ 'Price': 'mean', 'Event type': 'first', 'Ignore': 'first' }).reset_index()
关键细节说明
- 代码里的
'5T'是pandas的时间频率代码,代表5分钟(T是分钟的缩写,同理'H'代表小时、'D'代表天)。 - 关于其他列的聚合:如果你的
Event type和Ignore在同一个5分钟组内可能有不同的值,可以根据需求替换聚合方式,比如用'unique'保留所有唯一值,或者用lambda x: ', '.join(map(str, x))把所有值拼接起来。但从你的示例数据来看,这两列值都是固定的,用'first'完全够用。
运行后你会得到类似这样的结果:
Event time Event type Ignore Price
0 2018-05-11 22:15:00 kline 0 18202364.5
内容的提问来源于stack exchange,提问作者RustyShackleford
相关产品推荐
相关产品推荐

