如何按小时从金融资产DataFrame中筛选各Asset_ID数据?
按小时维度高效处理金融资产大数据集
针对秒级粒度的金融资产数据集,要按Date列的小时维度对每个Asset_ID的数据做处理(聚合或筛选),避免循环、pd.mask()这类低效方法,直接用Pandas内置的分组操作即可,这是处理大数据量的最优方案。
核心实现思路
- 统一时间格式:确保
Date列为datetime类型,否则无法进行时间维度的分组操作 - 生成小时级分组键:将
Date截断到小时级别,把同一小时内的所有数据归为一组 - 分组处理:按
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,提问作者ИНДУС Геймдев
相关产品推荐
相关产品推荐

