#python #python-3.x #pandas
#python #python-3.x #pandas
Вопрос:
У меня есть фрейм данных, который показывает значение закрытия для группы акций за последние 10 дней. У него есть индекс даты и времени, и акции могут быть идентифицированы по их названию / коду. Можете ли вы помочь мне выяснить, как рассчитать 4-дневную скользящую среднюю для каждой отдельной акции во фрейме данных?
Я пытался использовать метод pd.DataFrame.rolling().mean(), но он просто выдает скользящее среднее для всего набора данных. Не уверен, куда идти дальше…
sampleData = hundredDayData['2019-03-11':'2019-03-20']
sampleData['Close: 4 day mean'] = sampleData['Close'].rolling(window=4).mean()
sampleData.head(24)
Ответ №1:
df = pd.DataFrame({'code': ['a']*10 ['b']*10, 'Close': [1]*20})
df.groupby('code')['Close'].rolling(window=4).mean().reset_index()
- Сгруппируйте по
code
и вычислите скользящее среднее с помощью в группе
Примечание: Если все ваши code's
перемешаны (как показано ниже), то вам следует использовать
df = pd.DataFrame({'code': ['a']*10 ['b']*10 ['a']*10, 'Close': [1]*30})
rolling = df.groupby('code')['Close'].rolling(window=4).mean().reset_index().set_index('level_1').rename(
columns={'Close':'rolling'})[['rolling']]
df.merge(rolling, left_index=True, right_index=True)
Вычислите скользящее среднее на уровне группы, но используйте индекс, чтобы объединить его обратно в основной фрейм данных в качестве нового столбца.