首页 > 解决方案 > 上一页 每日收盘

问题描述

我有一个盘中数据的数据框,我想在盘中数据的第二天获得前一个每日收盘价。我的数据框使用日期时间索引。

我好像没有什么好办法。我试图重新采样日期并获得每日收盘价,然后它们合并到另一个日期框架中,但这不会起作用,因为索引和大小不同。有没有办法通过熊猫使用矢量方法来做到这一点?THNX

    Open    High    Low Close   Vol Daily_Low   is_daily_low    PrevDayClose
datetime                                
2012-09-18 09:30:00 1324.25 1325.00 1321.75 1324.50 143720  1321.75 1   NaN
2012-09-18 10:00:00 1324.50 1325.50 1323.00 1324.25 96809   1321.75 0   NaN
2012-09-18 10:30:00 1324.25 1326.00 1323.50 1326.00 101617  1321.75 0   NaN
2012-09-18 11:00:00 1326.00 1327.50 1325.25 1327.00 100908  1321.75 0   NaN
2012-09-18 11:30:00 1326.75 1327.00 1324.25 1325.00 64223   1321.75 0   NaN
2012-09-18 12:00:00 1324.75 1325.25 1322.25 1322.50 60017   1321.75 0   NaN
2012-09-18 12:30:00 1322.50 1325.00 1322.25 1324.00 36732   1321.75 0   NaN
2012-09-18 13:00:00 1324.00 1325.00 1322.00 1323.75 50707   1321.75 0   NaN
2012-09-18 13:30:00 1323.75 1324.00 1322.50 1322.75 26744   1321.75 0   NaN
2012-09-18 14:00:00 1322.75 1324.25 1322.25 1323.75 33473   1321.75 0   NaN
2012-09-18 14:30:00 1323.50 1324.25 1322.50 1323.25 34082   1321.75 0   NaN
2012-09-18 15:00:00 1323.25 1325.00 1323.00 1324.25 34119   1321.75 0   NaN
2012-09-18 15:30:00 1324.25 1325.75 1323.25 1325.50 117758  1321.75 0   NaN
2012-09-19 09:30:00 1327.50 1327.50 1323.50 1324.50 147406  1323.50 1   NaN
2012-09-19 10:00:00 1324.50 1329.25 1324.50 1326.75 148099  1323.50 0   NaN
2012-09-19 10:30:00 1326.50 1327.25 1324.25 1326.25 106183  1323.50 0   NaN
2012-09-19 11:00:00 1326.25 1330.25 1325.75 1329.50 130089  1323.50 0   NaN
2012-09-19 11:30:00 1329.50 1330.25 1328.50 1329.25 61245   1323.50 0   NaN
2012-09-19 12:00:00 1329.25 1331.25 1328.25 1331.00 91314   1323.50 0   NaN
2012-09-19 12:30:00 1330.75 1331.25 1329.75 1330.25 32613   1323.50 0   NaN
2012-09-19 13:00:00 1330.50 1330.75 1328.75 1329.00 24016   1323.50 0   NaN
2012-09-19 13:30:00 1329.00 1330.00 1328.00 1329.00 29070   1323.50 0   NaN
2012-09-19 14:00:00 1328.75 1330.50 1328.75 1329.75 20754   1323.50 0   NaN
2012-09-19 14:30:00 1329.50 1330.75 1329.25 1330.75 25555   1323.50 0   NaN
2012-09-19 15:00:00 1330.50 1331.25 1329.50 1329.75 49683   1323.50 0   NaN
2012-09-19 15:30:00 1329.75 1330.00 1326.50 1326.50 138803  1323.50 0   NaN
2012-09-20 09:30:00 1320.00 1321.00 1315.75 1316.75 192555  1315.75 1   NaN
2012-09-20 10:00:00 1317.00 1321.00 1316.50 1320.25 163925  1315.75 0   NaN
2012-09-20 10:30:00 1320.00 1323.50 1319.75 1323.25 114184  1315.75 0   NaN
2012-09-20 11:00:00 1323.25 1324.50 1321.25 1322.25 126658  1315.75 0   NaN

我想把它作为一个列,它是前一天的收盘表格,它是从前一天向前填充的。因此,在我的情况下,前一个收盘列的数据应该从 2012 年 9 月 18 日 15:30 收盘到第二天 2012 年 9 月 19 日收盘前填充。9/20 应该在前一天收盘时填写第二天的 hte 列。

标签: pythonpandasfinance

解决方案


您应该显示数据框的结构,以便其他人可以轻松地使答案更相关。

无论如何,您可以使用 pandas groupby 按日期分组,然后使用 last() 获取给定日期的“关闭”..然后使用 shift(-1) 获取前几天的关闭。

编辑:由于你不会共享数据结构,我将假设一个:

df = pd.DataFrame(columns = ['Price'], index = pd.date_range('1/1/2011', periods=72, freq='H'))
df.Price = range(72)
df['PrevClose']= df.Price.groupby(df.index.date).last().shift(1)
df['PrevClose'] = df['PrevClose'].fillna(method='ffill')

编辑#2:获取先前的关闭:

g = df.groupby(df.index.date).close.last().shift(1)

适用于新列:

df['daily_close'] = df.apply(lambda x: g.at[x.name.date()], axis=1)

推荐阅读