我有一个股票价格数据框,我想做的是使用from statsmodels.tsa.stattools import adfuller
对每只股票进行dickey fuller平稳性测试,然后我想建立一个由合格股票组成的清单此平稳性测试。下面是我用来执行测试的代码:
X = prices.values
X = log(X)
result = adfuller(X)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
例如,此代码将产生如下输出:
ADF Statistic: -2.440780
p-value: 0.130556
1%: -3.437
5%: -2.864
10%: -2.568
尽管打印result
为我们提供了更详细的(-2.441777051823896, 0.13029053843698696, 21, 978, {'1%': -3.437054035425408, '5%': -2.8644997864059363, '10%': -2.5683459429326576}, -7710.868442126897)
您会看到结果中间有一个字典,要使股票稳定,第一个数字(result[0]
)必须小于字典中的3个值。所以我想做的是迭代并说出result[0]
是否低于字典中键'1%'
,'5%'
和'10%'
的值,向上result[4]
返回股票名称,然后我希望将其放在单独的列表中。但是,我之前并没有真正在列表中找到字典,因此我有些困惑。我通常对循环和将内容添加到字典/列表很满意,如果我们可以想象一秒钟result[4]
是一个简单的数字而不是字典,那么我尝试的代码将是这样的:
stationary_stocks = []
for stock in stocks:
if result[0] < result[4]
stationary_stocks.append(stock)
但是,正如我们在result[4]
上面所看到的,实际上是一本字典,可以说我不确定如何进入其中。
因此,总而言之,我想创建一个包含result[0]
低于result[4]
中构成字典的所有值的股票的列表。任何帮助将不胜感激。干杯