Python pandas: вычисление скользящего среднего на основе нескольких критериев

#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)
  

Вычислите скользящее среднее на уровне группы, но используйте индекс, чтобы объединить его обратно в основной фрейм данных в качестве нового столбца.