sqlite 使用GROUPBY按天对OHLC数据进行分组

wvmv3b1j  于 2022-11-14  发布在  SQLite
关注(0)|答案(1)|浏览(209)

我正在将分钟数据从SQLite数据库读取到DataFrame中,其中的索引是DateTime对象:

open    high     low   close  volume  trade_count        vwap ticker
index                                                                                            
2022-09-13 04:26:00+00:00  163.50  163.50  163.50  163.50   298.0         12.0  163.503255   AAPL
2022-09-13 04:45:00+00:00  163.50  163.50  163.50  163.50   727.0          1.0  163.500000   AAPL
2022-09-13 05:16:00+00:00  163.43  163.43  163.43  163.43   202.0          4.0  163.430000   AAPL
2022-09-13 05:44:00+00:00  163.50  163.50  163.50  163.50   121.0          2.0  163.499587   AAPL
2022-09-13 05:45:00+00:00  163.46  163.46  163.46  163.46   200.0          2.0  163.460000   AAPL
...                           ...     ...     ...     ...     ...          ...         ...    ...
2022-09-14 19:57:00+00:00   99.73   99.73   99.69   99.69  1273.0         18.0   99.693425   ZROZ
2022-09-14 19:58:00+00:00   99.69   99.69   99.66   99.69  1114.0         11.0   99.686965   ZROZ
2022-09-14 19:59:00+00:00   99.69   99.82   99.69   99.76  9764.0         76.0   99.736332   ZROZ
2022-09-14 20:00:00+00:00   99.76   99.76   99.76   99.76  2168.0          1.0   99.760000   ZROZ
2022-09-14 20:33:00+00:00   99.96   99.96   99.96   99.96   150.0          4.0   99.968667   ZROZ

[317028 rows x 8 columns] df

我想把这个海量的 Dataframe 分成几个比特,按股票代码和日期分组。当我尝试以下方法时:

table = df.groupby(pd.Grouper(key='index', freq='1D'))

我得到的错误是:

raise KeyError(f"The grouper name {key} is not found")
KeyError: 'The grouper name index is not found'

当我将密钥更改为:

table = df.groupby(pd.Grouper(key=df.index, freq='1D'))

我得到的错误是:

if getattr(self._gpr_index, "name", None) == key and isinstance(
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我怎么才能按股票代码和按天分组呢?

relj7zay

relj7zay1#

因为key参数用于列名,所以您可以省略它:

table = df.groupby(pd.Grouper(freq='1D'))

或使用level参数:

table = df.groupby(pd.Grouper(level='index', freq='1D'))

或者将index转换为列(在我看来过于复杂):

table = df.reset_index().groupby(pd.Grouper(key='index', freq='1D'))

相关问题