【问题标题】:Resampling Minute data重新采样分钟数据
【发布时间】:2013-02-13 19:03:18
【问题描述】:

我有开放范围/第一个小时(美国东部标准时间上午 9:30-10:30)的基于分钟的 OHLCV 数据。我希望重新采样这些数据,以便获得一个 60 分钟的值,然后计算范围。

当我对数据调用 dataframe.resample() 函数时,我得到两行,第一行从上午 9:00 开始。我希望只有一排从上午 9:30 开始。

注意:初始数据从 9:30 开始。

编辑:添加代码:

# Extract data for regular trading hours (rth) from the 24 hour data set
rth = data.between_time(start_time = '09:30:00', end_time = '16:15:00', include_end = False)

# Extract data for extended trading hours (eth) from the 24 hour data set
eth = data.between_time(start_time = '16:30:00', end_time = '09:30:00', include_end = False)

# Extract data for initial balance (rth) from the 24 hour data set
initial_balance = data.between_time(start_time = '09:30:00', end_time = '10:30:00', include_end =      False)

卡住试图按个别日期分隔开盘范围并获取初始余额

conversion = {'Open' : 'first', 'High' : 'max', 'Low' : 'min', 'Close' : 'last', 'Volume' : 'sum'}
sample = data.between_time(start_time = '09:30:00', end_time = '10:30:00', include_end = False)
sample = sample.ix['2007-05-07']
sample.tail()

sample.resample('60Min', how = conversion) 

默认情况下,重新采样从整点开始。我希望它从数据开始的地方开始。

【问题讨论】:

  • 如果您复制并粘贴文本而不是使用图像,我们会更容易:)

标签: python pandas


【解决方案1】:

您可以使用resamplebase 参数:

sample.resample('60Min', how=conversion, base=30)

来自the above docs-link

base : int,默认为 0
对于均匀细分 1 天的频率,聚合间隔的“原点”。
例如,对于“5min”频率,base 的范围可以从 0 到 4。默认为 0

【讨论】:

  • 安迪,你太棒了!我浪费了很多时间试图让resample('H', base=30) 工作,直到我看到你的'60Min' 把戏。
  • 我看到文档链接现在无处可去,how 不再是 resample 的文档参数。 2019 年的做法是什么?
  • @coldspeed 是 resample('60min').agg(conversion) 吗?我下次用电脑试试。我不记得是不是就是这样。
  • 这就是目前的做法,是的。您还可以考虑现在添加一个pd.Grouper 解决方案,从 v0.23 开始。
【解决方案2】:

value 是您要聚合的列,按秒重新采样数据框日期并按平均值聚合,然后删除 nan 行。

data=[('2014-02-24 16:16:47.204000',    1.391424)
,('2014-02-24 16:18:48.296000',    1.048143)
,('2014-02-24 16:19:52.346000',  -0.823974)
,('2014-02-24 16:22:13.665000',   -0.689560)
,('2014-02-24 16:24:13.760000',   -0.323252)
,('2014-02-24 16:26:15.155000',   -1.095331)
,('2014-02-24 16:29:58.235000',   -0.185681)]

df=pd.DataFrame(data,columns=['Date','Value'])
df['Date']=pd.to_datetime(df['Date'])
minutes=df.resample('1Min',on='Date').mean().dropna()

print(minutes)

输出:

Value
Date                         
2014-02-24 16:16:00  1.391424
2014-02-24 16:18:00  1.048143
2014-02-24 16:19:00 -0.823974
2014-02-24 16:22:00 -0.689560
2014-02-24 16:24:00 -0.323252
2014-02-24 16:26:00 -1.095331
2014-02-24 16:29:00 -0.185681

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 2021-11-18
    • 2022-01-09
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 2021-11-19
    • 2016-12-05
    相关资源
    最近更新 更多