"df.resample ('4T'). Mean ()" дает свой первый результат перед четвертым значением кадра данных. Он продолжает точно находить среднее значение для следующих четырех значений, но поскольку исходное значение выключено, я не получаю значения там, где они мне нужны в кадре данных. Фактически, «7T», «8T» и «9T» дают свои первые результаты в неправильной позиции, в то время как «3T», «5T» и «10T» работают, как и ожидалось.
Код:
import csv
import datetime
from datetime import datetime
import pandas as pd
df = pd.read_csv('stockPrices/closingPrices-mar29b.csv',index_col='date',parse_dates=True)
df['close'] = df['close'].shift(1)
df['4ma'] = df.resample('4T').mean().shift(1)
print(df.tail())
CSV-файл, с которым я работаю:
https://docs.google.com/spreadsheets/d/1HzKrwcDM233uqlNZI_TdLmewJLIuKM-mKLiRtTlNauc/edit?usp=sharing
Текущий результат:
close 4ma
date
2019-03-25 09:34:00 279.1300 NaN
2019-03-25 09:33:00 278.9300 NaN
2019-03-25 09:32:00 278.8500 278.72875
2019-03-25 09:31:00 278.6900 NaN
2019-03-25 09:30:00 278.7675 NaN
Желаемый результат:
close 4ma
date
2019-03-25 09:34:00 279.1300 278.8094
2019-03-25 09:33:00 278.9300 NaN
2019-03-25 09:32:00 278.8500 NaN
2019-03-25 09:31:00 278.6900 NaN
2019-03-25 09:30:00 278.7675 NaN
Попытки исправить:
1. Использовал 'loffset' = '2T' следующим образом, но средние значения были неточными:
df['4ma loffset'] = df['close'].resample('4T',loffset='-2T').mean().shift(1)
2. Изменен порядок данных:
df = df.sort_index(ascending=True)
3. Устранены все смещения столбцов в коде. «5T» поставил первое среднее значение 5 минут на первой минуте кадра данных и после этого оставался неизменным, но «4T» все же дал свой первый результат до четвертой минуты.
** Примечание об использовании 'shift' в моем коде. Я смещаю свой столбец 'close' в исходном фрейме данных, а затем смещаю столбец 'ma', как только я его создаю. Данные о запасах, которые я получаю, начинаются в 9:31 и заканчиваются в 16:00. Цена 9:31 изначально является ценой закрытия минуты 9: 30: 01-9: 31: 00. Поскольку я хочу, чтобы скользящие средние были прямо в MM: SS (например, 5-минутное скользящее среднее в 9:35:00), я должен сместить (1) на моем исходном кадре данных, чтобы поместить число в пустой индекс 9:30:00. , Мне также нужно сместить мой столбец 'ma', иначе я получу значения в начале временного блока следующим образом:
2019-03-25 09:34:00 279.1300 NaN
2019-03-25 09:33:00 278.9300 NaN
2019-03-25 09:32:00 278.8500 NaN
2019-03-25 09:31:00 278.6900 NaN
2019-03-25 09:30:00 278.7675 278.87350