以年增长率生成未来数据框架

问题描述 投票:1回答:1

当我有基准年和增长率的数据时,我正在尝试生成某个产品的年度数据。

在玩具示例中,每种产品的“颜色”在效率方面的年增长率不同,我希望在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的一些方法,但似乎这种方法效率很低。

任何建议或提示将不胜感激。先感谢您!

python pandas dataframe
1个回答
2
投票

这是一种方法:

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))
© www.soinside.com 2019 - 2024. All rights reserved.