Генерация будущего фрейма с годовым темпом роста - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь сгенерировать годовые данные для определенного продукта, когда у меня есть данные за базовый год и темпы роста.

В примере с игрушкой у каждого продукта свой годовой темп роста эффективности в зависимости от его «цвета», и я хочу генерировать годовые данные до 2030 года.

Поэтому у меня есть данные базового года (base_year) следующим образом:

    year    color   shape    efficiency
0   2018    red     circle   50
1   2018    red     square   30
2   2018    blue    circle   100
3   2018    blue    square   60

И каждый тип темпа роста продукта (скорость роста) как:

    color   rate
0   red     30
1   blue    20

Результаты, к которым я стремлюсь:

    year    color   shape    efficiency
0   2018    red     circle   50
1   2018    red     square   30
2   2018    blue    circle   100
3   2018    blue    square   60
4   2019    red     circle   65
5   2019    red     square   39
6   2019    blue    circle   120
7   2019    blue    square   72
8   2020    red     circle   84.5
... (until 2030)

Данные, использованные в игрушечном коде, являются ..

base_year = pd.DataFrame(data = {'year': [2018,2018,2018,2018],
                     'color': ['red', 'red', 'blue', 'blue'],
                     'shape' : ['circle', 'square', 'circle', 'square'],
                     'efficiency' : [50, 30, 100, 60]}, columns = ['year', 'color', 'shape', 'efficiency'])

growthrate = pd.DataFrame(data = {'color': ['red', 'blue'],
                     'rate' : [30, 20]}, columns = ['color', 'rate'])

Я пробовал какой-то подход с использованием .loc, но кажется, что такой подход довольно неэффективен.

Любые предложения или советы будут оценены. Заранее спасибо!

1 Ответ

0 голосов
/ 09 сентября 2018

Вот один из способов сделать это:

years = 2031 - 2018

df = (pd.concat([df.assign(year=df['year']+i,
                          efficiency=df['efficiency']*((df['rate']/100+1)**i)) 
                for i, df in enumerate([base_year.merge(growthrate, on='color')] * years)])
      .drop('rate', axis=1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...