Previouls每日关闭

时间:2018-08-15 21:50:12

标签: python pandas finance

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

我似乎没有一个好的方法。我试图重新采样日期并获取每日收盘价,它们合并到另一个日期框架中,但由于索引和大小不同而无法正常工作。有没有办法通过熊猫使用矢量方法做到这一点? 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应该在第二天的前一天关闭该列。

1 个答案:

答案 0 :(得分:0)

您应该显示数据框的结构,以使其他人更容易使答案更加相关。

无论如何,您可以使用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)