我有一个pandas数据帧,结构如下:
Date Open High Low Close Volume
0 2003-10-01 00:00:00 1.16500 1.16700 1.16400 1.16690 1125
1 2003-10-01 01:00:00 1.16680 1.16790 1.16600 1.16720 933
............
这些是连续时间值,因为它是Eur / Usd数据。 我想重新采样这个创建一个每日数据帧,使用Open XXX中的值为Date XXXX-XX-XX 09:00:00的Open列,而Close值为XXXX-XX-XX 16:00:00的Close列值。高和低应该是XXXX-XX-XX 09:00:00和XXXX-XX-XX 16:00:00之间的较高和较低的低。 音量应该是XXXX-XX-XX 09:00:00和XXXX-XX-XX 16:00:00之间音量的总和。 在熊猫中有一种简单的方法吗? 怎么样?
由于
答案 0 :(得分:1)
这是一个两步过程。首先,您需要删除超出每日每小时限制的数据;然后你需要重新采样到每日频率。
假设这是我们的时间序列:
import pandas as pd
import numpy as np
ts = pd.Series(np.random.random(72), index=pd.date_range('1/1/2011', periods=72, freq='H'))
要按小时过滤,我们可以创建一个布尔数组,询问我们数据中的每个时间戳,无论其小时数是否在我们感兴趣的小时内,然后用它来索引我们的时间序列:
ts_filtered = ts[ts.index.map(lambda time: 9 <= time.hour <= 17)]
然后,要重新取样,只需使用resample
:
daily_stats = ts_filtered.resample('D').mean()
哪个让我们:
2011-01-01 0.507943
2011-01-02 0.416317
2011-01-03 0.573760
Freq: D, dtype: float64
答案 1 :(得分:1)
谢谢,我也找到了这个解决方案:
ohlc_dict = { 'Open':'first', 'High':'max', 'Low':'min', 'Close': 'last', 'Volume': 'sum' } df_filtered_daily = df_filtered.resample('D', how=ohlc_dict, closed='left', label='left')
答案 2 :(得分:1)
仅在09:00:00至16:00:00之间。
sf::Texture::~Texture()
是获得所需时间的简单方法
between_time
使用推荐的语法重新采样:
并且为了避免执行ts = ts.between_time('9:00','16:00')
时出现“未来警告”,请尝试以下操作:
resample