Pandas - OHLC 的多个股票分组
Pandas - Multiple Stocks Groupby for OHLC
我有一个格式如下的 .csv 文件。没有header,我只是为了理解而写的
time,stockname,price
09:00:00, ABC, 100
09:00:00, XYZ, 500
09:01:00, ABC, 101
09:01:00, XYZ, 499
继续
我想做一些类似 groupby 重采样(15 分钟)的价格,这样最终数据框就包含所有基于 OHLC 时间的股票,我可以传递股票名称和时间并获得 OHLC 列,我可以
不能 100% 确定您在寻找什么 -- 预期的输出会很有用。
无论如何,pd.Grouper 非常适合按时间间隔对日期时间索引进行分组。在下面的示例中,我生成了一些看起来像您的示例数据的示例数据并进行了一些分组。
import numpy as np
import pandas as pd
# generate some data
some_dates = pd.date_range(start='2017-01-01', periods=10, freq='5min')
df = pd.DataFrame(index=some_dates)
df.index.name = 'time'
df['stock_name'] = ['ABC', 'XYZ'] * 5
df['price'] = (np.random.rand(10) * 100).round(2)
print(df)
time stock_name price
2017-01-01 00:00:00 ABC 5.26
2017-01-01 00:05:00 XYZ 68.13
2017-01-01 00:10:00 ABC 91.76
2017-01-01 00:15:00 XYZ 21.16
2017-01-01 00:20:00 ABC 75.69
2017-01-01 00:25:00 XYZ 21.16
2017-01-01 00:30:00 ABC 80.25
2017-01-01 00:35:00 XYZ 4.83
2017-01-01 00:40:00 ABC 10.07
2017-01-01 00:45:00 XYZ 20.67
# do some grouping: e.g by 15 minute intervals & by stock_name
df.groupby([pd.Grouper(freq='15min'), df['stock_name']]).max()
time stock_name price
2017-01-01 00:00:00 ABC 91.76
2017-01-01 00:00:00 XYZ 68.13
2017-01-01 00:15:00 ABC 75.69
2017-01-01 00:15:00 XYZ 21.16
2017-01-01 00:30:00 ABC 80.25
2017-01-01 00:30:00 XYZ 4.83
2017-01-01 00:45:00 XYZ 20.67
我有一个格式如下的 .csv 文件。没有header,我只是为了理解而写的
time,stockname,price
09:00:00, ABC, 100
09:00:00, XYZ, 500
09:01:00, ABC, 101
09:01:00, XYZ, 499
继续
我想做一些类似 groupby 重采样(15 分钟)的价格,这样最终数据框就包含所有基于 OHLC 时间的股票,我可以传递股票名称和时间并获得 OHLC 列,我可以
不能 100% 确定您在寻找什么 -- 预期的输出会很有用。
无论如何,pd.Grouper 非常适合按时间间隔对日期时间索引进行分组。在下面的示例中,我生成了一些看起来像您的示例数据的示例数据并进行了一些分组。
import numpy as np
import pandas as pd
# generate some data
some_dates = pd.date_range(start='2017-01-01', periods=10, freq='5min')
df = pd.DataFrame(index=some_dates)
df.index.name = 'time'
df['stock_name'] = ['ABC', 'XYZ'] * 5
df['price'] = (np.random.rand(10) * 100).round(2)
print(df)
time stock_name price
2017-01-01 00:00:00 ABC 5.26
2017-01-01 00:05:00 XYZ 68.13
2017-01-01 00:10:00 ABC 91.76
2017-01-01 00:15:00 XYZ 21.16
2017-01-01 00:20:00 ABC 75.69
2017-01-01 00:25:00 XYZ 21.16
2017-01-01 00:30:00 ABC 80.25
2017-01-01 00:35:00 XYZ 4.83
2017-01-01 00:40:00 ABC 10.07
2017-01-01 00:45:00 XYZ 20.67
# do some grouping: e.g by 15 minute intervals & by stock_name
df.groupby([pd.Grouper(freq='15min'), df['stock_name']]).max()
time stock_name price
2017-01-01 00:00:00 ABC 91.76
2017-01-01 00:00:00 XYZ 68.13
2017-01-01 00:15:00 ABC 75.69
2017-01-01 00:15:00 XYZ 21.16
2017-01-01 00:30:00 ABC 80.25
2017-01-01 00:30:00 XYZ 4.83
2017-01-01 00:45:00 XYZ 20.67