将每日OHLCV重采样为每周OHLCV

3 投票
3 回答
2862 浏览
提问于 2025-04-17 15:15

我想把每天的数据(包括开盘价、最高价、最低价、收盘价和成交量)转换成每周的数据。请问用pandas可以做到吗?

下面是一个样本数据(1周的每日数据),格式是字典:

   {'High': {<Timestamp: 2007-03-02 00:00:00>: 1384.5,
  <Timestamp: 2007-03-05 00:00:00>: 1373.0,
  <Timestamp: 2007-03-06 00:00:00>: 1378.75,
  <Timestamp: 2007-03-07 00:00:00>: 1381.75,
  <Timestamp: 2007-03-08 00:00:00>: 1388.75},
 'Last': {<Timestamp: 2007-03-02 00:00:00>: 1365.0,
  <Timestamp: 2007-03-05 00:00:00>: 1351.5,
  <Timestamp: 2007-03-06 00:00:00>: 1374.5,
  <Timestamp: 2007-03-07 00:00:00>: 1372.0,
  <Timestamp: 2007-03-08 00:00:00>: 1384.5},
 'Low': {<Timestamp: 2007-03-02 00:00:00>: 1364.25,
  <Timestamp: 2007-03-05 00:00:00>: 1350.5,
  <Timestamp: 2007-03-06 00:00:00>: 1362.0,
  <Timestamp: 2007-03-07 00:00:00>: 1370.75,
  <Timestamp: 2007-03-08 00:00:00>: 1369.25},
 'Open': {<Timestamp: 2007-03-02 00:00:00>: 1378.5,
  <Timestamp: 2007-03-05 00:00:00>: 1356.75,
  <Timestamp: 2007-03-06 00:00:00>: 1365.25,
  <Timestamp: 2007-03-07 00:00:00>: 1374.0,
  <Timestamp: 2007-03-08 00:00:00>: 1370.0},
 'Volume': {<Timestamp: 2007-03-02 00:00:00>: 1706906,
  <Timestamp: 2007-03-05 00:00:00>: 1984041,
  <Timestamp: 2007-03-06 00:00:00>: 1397911,
  <Timestamp: 2007-03-07 00:00:00>: 1255484,
  <Timestamp: 2007-03-08 00:00:00>: 798237}}

3 个回答

2

这个例子是从官方文档中改编过来的:

# Weekly means
In [1305]: ts.resample('W', how='mean')
Out[1305]: 
2011-01-01   -0.319569
2011-01-02   -0.337703
2011-01-03    0.117258
Freq: W

你可以把日期调整到特定的星期几,比如用 'W-SUN' 表示星期天,或者用 'W-MON' 表示星期一。

查看文档链接

3

在pandas版本0.18.0之后,函数resample中的how参数被弃用了,所以现在的解决方案变成了:

ohlc_dict = {
    'Open':'first',
    'High':'max',
    'Low':'min',
    'Close':'last',
    'Volume':'sum'
    }

df = df.resample('W').agg(ohlc_dict)
9

一旦你把数据放进一个叫做DataFrame的东西里,你就可以这样做:

 ohlc_dict = {
    'Open':'first',
    'High':'max',
    'Low':'min',
    'Close':'last',
    'Volume':'sum'
    }

DataFrame.resample('W-Fri', how=ohlc_dict)

这样做会给你一周的数据,截止到星期五的收盘价、开盘价、最高价和最低价。

撰写回答