我有一个存储每日数据的DataFrame
,如下所示:
Date Open High Low Close Volume
2010-01-04 38.660000 39.299999 38.509998 39.279999 1293400
2010-01-05 39.389999 39.520000 39.029999 39.430000 1261400
2010-01-06 39.549999 40.700001 39.020000 40.250000 1879800
2010-01-07 40.090000 40.349998 39.910000 40.090000 836400
2010-01-08 40.139999 40.310001 39.720001 40.290001 654600
2010-01-11 40.209999 40.520000 40.040001 40.290001 963600
2010-01-12 40.160000 40.340000 39.279999 39.980000 1012800
2010-01-13 39.930000 40.669998 39.709999 40.560001 1773400
2010-01-14 40.490002 40.970001 40.189999 40.520000 1240600
2010-01-15 40.570000 40.939999 40.099998 40.450001 1244200
我打算把它合并成每周的数据。分组后:
应该是这样的:
Date Open High Low Close Volume
2010-01-04 38.660000 40.700001 38.509998 40.290001 5925600
2010-01-11 40.209999 40.970001 39.279999 40.450001 6234600
目前,我的代码片段如下所示,我应该使用哪个函数将基于每日的数据映射到预期的基于每周的数据?非常感谢!
import pandas_datareader.data as web
start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2016, 12, 31)
f = web.DataReader("MNST", "yahoo", start, end, session=session)
print f
不是直接的答案,但是假设列是日期(表的转置),没有缺少日期。
您可以
resample
(每周)、offset
(移位)和apply
聚合规则,如下所示:得到:
一般来说,假设您具有指定格式的数据帧,则需要执行以下步骤:
Date
放入索引resample
索引。您所拥有的是将不同的函数应用于不同列的情况。See。
您可以通过各种方式重新采样。例如,你可以取数值的平均值或计数等。检查pandas resample。
您还可以应用自定义聚合器(检查同一链接)。 考虑到这一点,您的案例的代码片段可以给出如下:
这里,
W
表示每周重新采样,默认范围是从周一到周日。要将标签保留为星期一,请使用loffset
。 有几个预定义的日期说明符。看看pandas offsets。您甚至可以定义自定义偏移(see)。回到重采样方法。在这里,对于
Open
和Close
,您可以指定自定义方法来获取第一个值等,并将函数句柄传递给how
参数。这个答案是基于这样的假设:数据似乎是每天的,即每天只有一个条目。此外,不存在非工作日的数据。i、 坐着晒太阳。所以把这周的最后一个数据点作为周五的数据点是可以的。如果你愿意的话,你可以用商务周代替“W”。此外,对于更复杂的数据,您可能需要使用
groupby
对每周数据进行分组,然后在其中处理时间索引。顺便说一句,解决方案的要点可以在: https://gist.github.com/prithwi/339f87bf9c3c37bb3188
相关问题 更多 >
编程相关推荐