首页 > 解决方案 > 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 中永久复制和粘贴,但我只是不知道如何。我该如何实现这一点,建立一个字典或函数?

谢谢

标签: pythonpandasdataframe

解决方案


好吧,既然没有人回复,我就继续努力。我想出了如何通过函数来​​做到这一点。我不认为它非常有效,但它可以完成工作。如果可以,请添加其他方法

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)

推荐阅读