【发布时间】:2016-11-02 19:42:39
【问题描述】:
我正在根据一周的收盘价和下周的开盘价调查市场统计数据。为此,我在 Pandas 中使用resample。为了举个例子,我在下面使用 pandas DataReader。
from pandas.io.data import DataReader
首先获取每日市场数据:
SP = DataReader("^GSPC", "yahoo")
del SP['Adj Close']
del SP['Volume']
SP.head()
Open High Low Close
Date
2010-01-04 1116.560059 1133.869995 1116.560059 1132.989990
2010-01-05 1132.660034 1136.630005 1129.660034 1136.520020
现在将resample 改为每周时间范围:
ohlc_dict = {
'Open':'first',
'Close': 'last'}
w1_resamp = SP.resample('1w',how=ohlc_dict, closed='left', label='left')
这给了我每周的收盘和开盘数据。我现在根据np.where 声明强调上周收盘价和本周开盘价之间的距离。
w1_resamp['distance'] = np.where(w1_resamp['Open'] < w1_resamp['Close'].shift(),(w1_resamp["Close"].shift() - w1_resamp["Open"]),'np.nan');
Close Open distance
Date
2010-01-03 1144.979980 1116.560059
2010-01-10 1136.030029 1145.959961
2010-01-17 1091.760010 1136.030029
2010-01-24 1073.869995 1092.400024
2010-01-31 1066.189941 1073.890015
2010-02-07 1075.510010 1065.510010 0.6799310000001242
2010-02-14 1109.170044 1079.130005
2010-02-21 1104.489990 1110.000000
2010-02-28 1138.699951 1105.359985
2010-03-07 1149.989990 1138.400024 0.29992700000002515
2010-03-14 1159.900024 1148.530029 1.4599610000000212
我现在想在原始数据框 SP 中添加一个新列,显示时间和日期间隙(如 w1_resamp['distance'] 中突出显示)已关闭但不知道如何执行此操作...有人可以帮忙吗?
根据 cmets 中的请求,添加的图像在 SP 数据帧中显示所需的输出:
【问题讨论】:
-
可能有助于查看您希望最终数据框的外观示例。您想要在该周下跌后再次达到原始每周开盘价时的列标记?
-
“差距已缩小”是什么意思?你的意思是
distance从非空变为空?此外,对于 else 情况,您的np.where()应该返回np.nan,而不是''。 -
嗨,举个例子来说明一下。如果我们看到 2010-01-31 周收盘价为 1066.18,下周开盘价为 1065.51,则 w1_resamp['distance'] 列中突出显示的差距为 0.67。我想在 SP 数据框上创建一个新列,突出显示此差距关闭且价格回到 1066.18 的那一天。最终我将使用分钟数据并希望捕获一天中的时间,但上面的示例不够精细,因为源数据是每天的。
-
添加的图像显示了所需的 SP 数据帧输出 @Jeff L。突出显示的值与我的上一条评论一致。