#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