如何用pandas groupby将多标的分钟数据按天拆分分组
问题场景
我有一个包含不同标的(symbol)分钟K线数据的DataFrame,数据示例如下:
timestamp open high low close volume trade_count vwap symbol 0 2021-10-13 08:00:00+00:00 140.20 140.40 140.000 140.40 6084 65 140.205417 AAPL 1 2021-10-13 08:01:00+00:00 140.35 140.40 140.200 140.40 3052 58 140.308182 AAPL ... ... ... ... ... ... ... ... ... ... 58254 2021-10-27 20:12:00+00:00 209.58 209.58 209.580 209.58 144 1 209.580000 ZTS [58255 rows x 9 columns]
我希望用df.groupby实现按标的+日期分组,遍历每个标的的每日分钟数据,不需要聚合生成日线数据,只是拆分保留原始分钟数据。之前尝试的代码:
table = df.groupby(pd.Grouper(key='timestamp', axis=0, freq='D')).sum()
返回的是聚合后的日线数据,不符合需求,请问如何正确实现?
解决方案
你需要同时按symbol(标的)和timestamp的日期部分分组,不调用聚合函数,直接遍历分组结果即可保留原始分钟数据,有两种常用实现方式:
方式一:利用pd.Grouper指定多分组键
# 按标的 + 日期分组,不执行聚合操作 groups = df.groupby([ 'symbol', pd.Grouper(key='timestamp', freq='D') ]) # 遍历每个分组,获取对应标的的当日分钟数据 for (symbol, date), daily_data in groups: print(f"标的: {symbol}, 日期: {date.date()}") print(daily_data) # daily_data为该标的当日的所有原始分钟K线数据
方式二:提取日期列后分组
如果觉得pd.Grouper不够直观,可以先从timestamp中提取日期作为单独列,再按标的+日期分组:
# 新增日期列,提取timestamp的日期部分 df['date'] = df['timestamp'].dt.date # 按标的+日期分组 groups = df.groupby(['symbol', 'date']) # 遍历分组 for (symbol, date), daily_data in groups: print(f"标的: {symbol}, 日期: {date}") print(daily_data)
两种方式都能满足需求:每个分组对应单个标的某一天的所有分钟级原始数据,完全保留原始K线的字段和数据,没有任何聚合处理。
内容的提问来源于stack exchange,提问作者a7dc
相关产品推荐
相关产品推荐

