Давайте начнем с простого объяснения вопроса и краткого ответа, затем обсудим общие вопросы оптимизации.
Я создал файл с еще несколькими строками, а также удалил пробелы из имен столбцов (чтобы сделатьвсе проще).
Date,SH,Date,QS,Date,WX
26/02/18, 34, 16/06/13, 5634, 15/06/17, 100
27/02/18, 33, 17/06/13, 5763, 16/06/17, 100
1/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
2/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
3/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
4/03/18 ,39, 18/06/13, 6139, 17/06/17, 100
5/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
6/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
7/03/18 ,35, 18/06/13, 6114, 17/06/17, 100
8/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
9/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
19/03/18 ,35, 18/06/13, 6139, 17/06/17, 100
импорт панд как pd
fn = "testlogs" WINDOW = 3
df = pd.read_csv (fn)
print (df.SH.rolling (WINDOW) .std (ddof = 0))
0 NaN
1 NaN
2 0.816497
3 0.942809
4 0.000000
5 1.885618
6 1.885618
7 1.885618
8 0.000000
9 0.000000
10 0.000000
11 0.000000
Name: SH, dtype: float64
Подробнее о VOL см. здесь
Теперь, что касается эффективности, «преждевременная оптимизация - корень всего зла» (Кнут).В вашем случае, если у вас есть только 400 акций и только одна линия в день, тогда это менее 14 МБ данных за 100 лет, а дешевые смартфоны обычно имеют 16 ГБ ОЗУ.Таким образом, все ваши данные будут храниться в оперативной памяти, и даже если вы прочитаете каждое значение много раз, вычисление VOL займет доли секунды при очень низкой загрузке ЦП.
Подробнее о моей конкретной реализации - я использую панд,со следующими преимуществами: (1) короткий и простой код (2) эффективность из-за векторных вычислений
Недостатки: необходимо изучить эту библиотеку, которая может быть подавляющей для начинающих.