如何 运行 多个时间序列中 python 的脚本?

How to run a script in python on multiple time series?

我正在尝试 运行 使用 the StatsModels library 以下脚本:

cadf = ts.adfuller(df1.spread)
print 'Augmented Dickey Fuller test statistic =',cadf[0]
print 'Augmented Dickey Fuller p-value =',cadf[1]
print 'Augmented Dickey Fuller 1%, 5% and 10% test statistics =',cadf[4]

在我的数据框上,我的数据框目前包含多个时间序列 (200+),我想 运行 在每个时间序列上使用上述脚本。以下是数据框的示例:

Sn.No   A-B      B-C         A-C
  1       10       11.15       13.22
  2       11       12.36       14.75
  3       10.75    11.54       14.21

所以,我想 运行 A-B、B-C 和 A-C 上的 ADF 测试脚本,并为每个测试 statistic/output。

要单独访问列,而不是访问整个数据框,基本上:

df1['A-B']

将为您提供第一列。在列表中将它们四舍五入:

columns = ['A-B', 'B-C', 'A-C']

如果您有 200 多个列,您应该以不同的方式访问它们。假设你有 200 个。这样的事情应该是可能的:

columns = range(200)

在这种情况下,您不需要下面的 xrange 函数,但像这样:

df1.iloc(column)

我之所以知道这是因为我查阅了the source code for dataframe in the statmodels library, which apparently is a Pandas dataframe。假设您必须像上例那样输入点差,将输出统计信息收集在一个 使用列表理解表达式列出。

cadfs = [ts.adfuller(df1[column].spread) for column in columns]

相反,如果您通过数字索引访问:

cadfs = [ts.adfuller(df1.iloc(column).spread) for column in columns]

为了让代码更 可读使用局部常量。

TEST = 0    
P = 1
PERCENTILES = 4

values = [cadfs[column][TEST] for column in xrange(columns)]
ps     = [cadfs[column][P] for column in xrange(columns)]
pct    = [cadfs[column][PERCENTILES] for column in xrange(columns)]

print 'Augmented Dickey Fuller Test'
print 'ADF Test Statistics - p - Percentiles 1%, 5% and 10%'
print values, ps, pct