используйте pandas, чтобы получить среднее значение за 3 года в одной строке

#python #pandas #dataframe #time-series

#python #pandas #фрейм данных #временные ряды

Вопрос:

У меня есть таблица продаж разных компаний.

 company_name sales  year
    A         200   2019
    A         100   2018
    A         30    2017
    A         20    2016
    A         18    2015
    B         15    2019
    B         30    2018
    B         45    2017
    B         120   2016
    B         100   2015
 

Теперь я хочу добавить продажи за предыдущий год в ту же строку, что и . Как это получить?

 company_name sales  year   past_3_years_average
    A         200   2019       110
    A         100   2018       50
    A         30    2017       20        
    A         20    2016       Nan
    A         10    2015       Nan
    B         15    2019       30
    B         30    2018       66.6
    B         45    2017       90
    B         125   2016       Nan 
    B         100   2015       Nan
 

Комментарии:

1. ваши данные меняются на A 2015 . Ввод — 18 В / с, вывод — 10 также для B 2017 , среднее значение не равно 90. (45 125 100)/3 = 88.33 не могли бы вы сообщить мне, являются ли они реальными или выдуманными числами

2. извините, я имел в виду ввод (45 120 100)/3 = 88.33

Ответ №1:

Давайте попробуем свернуть

 df['past_3_years_average'] = df.sort_values(['company_name','year']).groupby('company_name').sales.rolling(3).mean().reset_index(level=0,drop=True)

df
Out[106]: 
  company_name  sales  year  past_3_years_average
0            A    200  2019            110.000000
1            A    100  2018             50.000000
2            A     30  2017             20.000000
3            A     20  2016                   NaN
4            A     10  2015                   NaN
5            B     15  2019             30.000000
6            B     30  2018             66.666667
7            B     45  2017             90.000000
8            B    125  2016                   NaN
9            B    100  2015                   NaN