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

如何按小时从金融资产DataFrame中筛选各Asset_ID数据?

按小时维度高效处理金融资产大数据集

针对秒级粒度的金融资产数据集,要按Date列的小时维度对每个Asset_ID的数据做处理(聚合或筛选),避免循环、pd.mask()这类低效方法,直接用Pandas内置的分组操作即可,这是处理大数据量的最优方案。

核心实现思路

  1. 统一时间格式:确保Date列为datetime类型,否则无法进行时间维度的分组操作
  2. 生成小时级分组键:将Date截断到小时级别,把同一小时内的所有数据归为一组
  3. 分组处理:按Asset_ID+小时级时间分组,执行聚合或筛选逻辑

代码示例

场景1:按小时聚合数据(匹配目标示例的聚合需求)

import pandas as pd

# 假设你的数据集存储在df中
# 1. 转换Date列为datetime类型(如果原始数据是字符串格式)
df['Date'] = pd.to_datetime(df['Date'])

# 2. 生成小时级时间分组键
df['hourly_date'] = df['Date'].dt.floor('H')

# 3. 按Asset_ID和小时时间分组,执行聚合逻辑(可按需调整)
agg_result = df.groupby(['Asset_ID', 'hourly_date']).agg(
    Count=('Count', 'sum'),
    Open=('Open', 'first'),
    High=('High', 'max'),
    Low=('Low', 'min'),
    Close=('Close', 'last')
).reset_index()

# 调整列名和顺序,匹配目标格式
agg_result.rename(columns={'hourly_date': 'Date'}, inplace=True)
agg_result = agg_result[['Asset_ID', 'Count', 'Open', 'High', 'Low', 'Close', 'Date']]

场景2:筛选指定小时的所有Asset_ID数据

如果只是需要提取某一小时的所有数据,而非聚合:

# 定义目标小时
target_hour = pd.to_datetime('2018-01-01 01:00:00')
# 筛选该小时内的所有数据
filtered_result = df[df['Date'].dt.floor('H') == target_hour]

关键说明

  • dt.floor('H'):将时间戳向下取整到最近的小时,确保同一小时的所有数据被正确分组
  • groupby+agg:Pandas底层用C实现的高效分组逻辑,速度比Python循环快数倍,完全适配百万级以上的大数据量

内容的提问来源于stack exchange,提问作者ИНДУС Геймдев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:17:22