【问题标题】:Pandas: Get ohlc data for every rowPandas:获取每一行的 ohlc 数据
【发布时间】:2016-06-17 02:22:02
【问题描述】:

我有一个DataFrame,带有一个datetime 索引和一个价格列。我想要 ohlc 数据。 (开、高、低、收)

我想以给定的频率重新采样此数据帧在每一行

frame.resample('60S', how = 'ohlc') 有效,但现在数据帧的索引间隔 60 秒。我想从前 60 多行的每一行重新采样。 (如果索引相隔 5 秒,则为 12)。这样我就可以为原始数据框中的每一行设置 ohlc 值。

我认为df.resample 无法实现我想做的事情,但.agg.map 可能实现?

如何获取每一行行的 ohlc 数据?

n = 10000

prices = np.linspace(100.0, 103.0, n) + np.random.normal(0.0, 0.3, n)
f = pd.DataFrame({'price': prices}, index = pd.date_range(end = datetime.utcnow(), freq = '5S', periods = n))

ohlcized = f.resample('60S', how = 'ohlc') # resampling doesnt work (834 != 10000)
len(ohlcized) # 834
len(f) # 10000

if len(ohlcized) == len(f):
    print "question answered"

【问题讨论】:

  • 能否提供一些示例数据?
  • 完成。如果你需要我澄清更多,我可以。问题是重采样会删除行。我想保留所有数据,并在过去 60 秒的数据中对每一行执行“ohlc”操作。

标签: python numpy pandas dataframe


【解决方案1】:

对于等间距的时间戳:

bars = 12  
df = pd.concat([f.shift(bars - 1), pd.rolling_max(f, bars), pd.rolling_min(f, bars), f], 
               axis=1)
df.columns = ['Open', 'High', 'Low', 'Close']

>>> df.tail()
                                  Open        High         Low       Close
2016-03-03 19:20:49.336236  102.510446  103.603518  102.438872  102.810945
2016-03-03 19:20:54.336236  102.916919  103.603518  102.438872  103.072880
2016-03-03 19:20:59.336236  103.603518  103.603518  102.438872  103.290665
2016-03-03 19:21:04.336236  102.966331  103.290665  102.438872  103.095781
2016-03-03 19:21:09.336236  102.438872  103.409546  102.438872  103.409546

【讨论】:

  • rolling_min 和 rolling_max 应该切换
  • 已在上面修复。谢谢。
猜你喜欢
  • 2016-07-13
  • 1970-01-01
  • 2014-08-04
  • 2017-01-21
  • 2022-11-29
  • 2021-09-04
  • 1970-01-01
  • 2016-09-25
  • 2014-10-11
相关资源
最近更新 更多