pandas 以前每日关闭

mdfafbf1  于 2023-03-11  发布在  其他
关注(0)|答案(2)|浏览(107)

我有一个日内数据的 Dataframe ,我想得到前一天收盘的第二天的日内条形数据。我的 Dataframe 是使用日期时间索引。
我似乎没有一个很好的方法来做到这一点。我试图重新采样的日期,并获得每日收盘和他们合并到另一个日期框架,但这不会工作,因为索引和大小是不同的。有没有一种方法可以做到这一点,通过Pandas使用矢量方法?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日应该用前一天收盘填充第二天的列。

vmdwslir

vmdwslir1#

你应该展示你的数据框架的结构,以便于其他人做出更相关的回答。
无论如何,你可以使用panda groupby来按日期分组,然后使用last()来获取给定日期的“close”,接着使用shift(-1)来获取前几天的close。
编辑:既然你不会分享数据结构,我就假设一个:

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)
vx6bjr1n

vx6bjr1n2#

试试这个:df ['每日关闭']= df.关闭.分组(df.index.date).最后().shift().重新索引(df.index.date).值

相关问题