python - 生成具有年增长率的未来数据框
问题描述
当我有基准年和增长率的数据时,我正在尝试为某个产品生成年度数据。
在玩具示例中,每种产品的“颜色”都有不同的效率年增长率,我想生成到 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
而每类产品的增长率(growthrate)为:
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 的一些方法,但似乎这种方法效率很低。
任何建议或提示将不胜感激。先感谢您!
解决方案
这是执行此操作的一种方法:
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))
推荐阅读
- python - 通过字典中的系列映射创建新的二进制列
- android - 颤振升级破坏了我的应用程序
- android - 在 Android App Bundle 中添加 SwitchCompat 后,资源未找到错误 res/drawable/abc_switch_thumb_material.xml
- github - github 存储库上烧瓶应用程序的 .wsgi 密钥的标准实践
- python - 无法安装flask-mysqldb
- php - SQL格式化表数据
- python - for循环中的隐藏字符串到列表中
- javascript - 使用 react-ckeditor-component 会引发错误,提示未定义 CKEDITOR
- svg - SVG TextPath 字符缺失
- php - HTML:将表格放入表单