python - Pandas:如何将一系列函数应用于多对列
问题描述
我正在使用旧的人口预测数据来确定不同城市的增长比例,然后将其与新更新的增长数字相乘,以获得新的预测数字。听起来可能不是这样,但这个想法非常简单。
我创建的简化示例:
df = pd.DataFrame({2010: [100, 110, 120], 2015: [150, 155, 175], 2020: [180, 190, 200], 2025: [200, 210, 220]},
index = {'CityA', 'CityB', 'CityC'})
df
之后我的一系列功能是:
df['10-15'] = df[2015] - df[2010]
growth = df['10-15'].sum()
df['10-15 ratio'] = df['10-15']/growth
#Real Total growth is calculated from another dataframe
df2 = pd.DataFrame({2015: 200, 2020:210, 2025: 220}, index = ['real increase'])
df2
growth2015 = df2.at['real increase', 2015]
df['New2015'] = df[2010] + growth2015*df['10-15 ratio']
最终,这会给我我想要的结果,用最新的增长数字调整预测。
df
现在的问题是,从 2015 年到 2045 年,我每年都这样做。我知道必须有一种方法可以做到这一点,而无需在 Python 中永久复制和粘贴,但我只是不知道如何。我该如何实现这一点,建立一个字典或函数?
谢谢
解决方案
好吧,既然没有人回复,我就继续努力。我想出了如何通过函数来做到这一点。我不认为它非常有效,但它可以完成工作。如果可以,请添加其他方法
def letstry(n):
df[str(n-5)+ '-' +str(n)] = df[n] - df[n-5]
growth = df[str(n-5)+ '-' +str(n)].sum()
df[str(n-5)+ '-' +str(n)+ 'ratio'] = df[str(n-5)+ '-' +str(n)]/growth
realg = df2.at['real increase', n]
df['New' + str(n)] = df[n-5] + realg*df[str(n-5)+ '-' +str(n)+ 'ratio']
return df
for i in range(2010, 2050, 50):
letstry(i)
推荐阅读
- java - Spring Cloud Stream 中的错误管理与 Kafka Stream
- php - PHP echo php 但替换任何空格
- c++ - 我们可以将数据永久保存为数据结构吗?
- javascript - 如何重构此 Vue Js 代码以避免使用本地存储?
- python - 即使有训练集,Keras 二值图像分类器也会返回 1 个类别
- python-3.x - 使用“cherrypy.tree.mount”时无法连接到 Dockerized CherryPy 服务器
- vba - VBA 在保留标题的同时删除了过滤的行
- java - 实现了 4 个参数的自定义二进制搜索,但如何避免迭代获得下限?
- python - mock.patch.dict at class level - python unit test
- php - Composer codeIgniter “无需安装或更新”甚至将库添加到 composer JSON