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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:55:15