pyhton 1分钟bar数据合成5分钟bar数据
时间: 2023-08-17 21:06:01 浏览: 145
假设你有一个包含1分钟bar数据的DataFrame,可以按以下方式合成5分钟bar数据:
```python
import pandas as pd
# 读取1分钟数据
df = pd.read_csv('1min_bars.csv', parse_dates=['timestamp'])
# 设置时间戳为索引
df.set_index('timestamp', inplace=True)
# 合成5分钟数据
df_5min = df.resample('5T').agg({
'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'volume': 'sum'
})
# 重命名列
df_5min.columns = ['open', 'high', 'low', 'close', 'volume']
# 保存5分钟数据
df_5min.to_csv('5min_bars.csv')
```
这里使用了pandas的resample函数来将1分钟数据合成5分钟数据。其中,'5T'表示5分钟时间间隔,'first'表示选取每个时间段的第一个值作为开盘价,'max'表示选取每个时间段的最高值作为最高价,'min'表示选取每个时间段的最低值作为最低价,'last'表示选取每个时间段的最后一个值作为收盘价,'sum'表示选取每个时间段的所有值的总和作为成交量。
相关问题
使用pandas 将秒级的tick数据,合成为1分钟的bar
可以使用 resample 方法将秒级的 tick 数据合成为 1 分钟的 bar 数据。
假设有以下的 tick 数据:
```python
import pandas as pd
# 创建一些秒级的 tick 数据
tick_data = pd.DataFrame({
'timestamp': pd.date_range('2022-01-01', periods=10, freq='S'),
'price': [10, 12, 11, 13, 14, 13, 15, 16, 17, 18]
})
print(tick_data)
```
输出:
```
timestamp price
0 2022-01-01 00:00:00 10
1 2022-01-01 00:00:01 12
2 2022-01-01 00:00:02 11
3 2022-01-01 00:00:03 13
4 2022-01-01 00:00:04 14
5 2022-01-01 00:00:05 13
6 2022-01-01 00:00:06 15
7 2022-01-01 00:00:07 16
8 2022-01-01 00:00:08 17
9 2022-01-01 00:00:09 18
```
使用 resample 方法将其合成为 1 分钟的 bar 数据:
```python
# 将 tick 数据按照 1 分钟进行 resample
bar_data = tick_data.set_index('timestamp').resample('1T').agg({
'price': 'ohlc'
})
print(bar_data)
```
输出:
```
price
open high low close
timestamp
2022-01-01 00:00:00 10 11 10 11
2022-01-01 00:01:00 13 18 13 18
```
可以看到,tick 数据被成功合成为了 1 分钟的 bar 数据。其中,ohlc 表示 open, high, low, close 四个价格。
python生成多个柱状图合成一个并显示数据
可以使用Matplotlib库来生成多个柱状图合成一个,并显示数据。以下是一个简单的示例代码:
```python
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.arange(5)
y1 = np.random.randint(1, 10, size=5)
y2 = np.random.randint(1, 10, size=5)
y3 = np.random.randint(1, 10, size=5)
# 绘制柱状图
fig, ax = plt.subplots()
ax.bar(x, y1, label='y1')
ax.bar(x, y2, bottom=y1, label='y2')
ax.bar(x, y3, bottom=y1+y2, label='y3')
# 显示数据标签
for i, v in enumerate(y1):
ax.text(i, v/2, str(v), ha='center', va='center')
for i, v in enumerate(y2):
ax.text(i, v/2+y1[i], str(v), ha='center', va='center')
for i, v in enumerate(y3):
ax.text(i, v/2+y1[i]+y2[i], str(v), ha='center', va='center')
# 设置图例和标题
ax.legend()
ax.set_title('Multiple Bar Chart')
plt.show()
```
这段代码会生成三个随机数据的柱状图,将它们合成一个,并在每个柱子上显示数据标签。你可以根据需要修改数据和样式。
阅读全文