You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas 0.22重采样仅保留完整4H区间,移除不完整区间

解决Pandas重采样后保留完整区间的问题

你完全不需要手动截断不完整的区间,Pandas可以通过聚合时统计数据量+过滤的方式轻松实现这个需求,而且完全兼容你使用的0.22版本。

核心思路

你的原始数据是严格1小时粒度的,所以一个完整的4小时区间必然包含恰好4条原始记录。我们只需要在重采样时统计每个区间内的原始数据条数,之后过滤掉条数不等于4的区间即可。

修改后的代码(简洁版)

# 先执行重采样聚合
resampled_obj = srcData.resample('4H')
outputData = resampled_obj.agg({
    'open': 'first',
    'high': 'max',
    'low': 'min',
    'close': 'last',
    'volume': 'sum',
    'vwap': 'mean',
    'turnover': 'sum',
    'symbol': 'first'
})

# 过滤出仅包含4条原始数据的完整区间
outputData = outputData[resampled_obj.size() == 4]

另一种直观实现方式

如果你想更直观看到每个区间的数据量,也可以在聚合时额外添加计数列,再过滤:

# 重采样时同时统计每个区间的原始数据数量
outputData = srcData.resample('4H').agg({
    'open': 'first',
    'high': 'max',
    'low': 'min',
    'close': 'last',
    'volume': 'sum',
    'vwap': 'mean',
    'turnover': 'sum',
    'symbol': 'first',
    'timestamp': 'count'  # 用任意非空列计数即可
})

# 过滤完整区间并移除计数列
outputData = outputData[outputData['timestamp'] == 4].drop('timestamp', axis=1)

效果说明

这两种方法都会自动剔除像2018-05-08 12:00:00这样仅包含1条原始数据的不完整区间,最终输出就是你期望的仅保留完全闭合的4小时粒度数据。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:04:44