如何在每个数据框列旁边插入新列

时间:2019-09-07 02:37:15

标签: python pandas dataframe

刚开始使用python进行编码,我想执行一个增长计算(Year2 / Year1)-1以找出同比增长。

这是我从excel加载的原始数据框

        Revenue Income  Profit
2015    10000   5000    2000
2016    20000   6000    3000
2017    30000   7000    4000
2018    40000   8000    5000
2019    50000   9000    6000

这是我希望在finalData_df数据帧中具有每个原始列旁边的YoY计算以显示简单增长的最终状态

       Revenue  YoY    Income   YoY   Profit    YoY
2015    10000   NaN     5000    NaN     2000    NaN
2016    20000   1.00    6000    0.20    3000    0.50
2017    30000   0.50    7000    0.17    4000    0.33
2018    40000   0.33    8000    0.14    5000    0.25
2019    50000   0.25    9000    0.13    6000    0.20

我已经编写了将Excel加载到名为financialData的数据框中的代码。

使用for循环,我对每一列进行迭代以计算YoY回报并将其存储在yearOnYear_df中。

但是,我不想为所有计算保留单独的数据框。

可以指导我如何在for循环中的每一列上使用.shift()之后插入新列吗?还是有更简单的方法?

请在下面找到我的代码 谢谢

# Load income statement
financialData_df = pd.read_excel('C:/Statement_Annual.xls', index_col = 'Name')

#Retrieve the list of columns names to use for iteration later
columnsList = list(financialData_df)


yearOnYear_df = pd.DataFrame()

# Start to calculate the YoY growth using dataframe .shift() method
for column in columnsList:
    yearOnYear_df[column]= (financialData_df[column] / financialData_df[column].shift(1)) - 1

yearOnYear_df.to_excel('C:/Result.xlsx')

1 个答案:

答案 0 :(得分:2)

编辑:@ALollz使我想起pct_change :))。就这么简单

df1 = df.join(df.pct_change().add_prefix('YoY_'))
df1 = df1.reindex(columns=['Revenue', 'YoY_Revenue', 
                           'Income', 'YoY_Income', 
                           'Profit', 'YoY_Profit'])

Out[342]:
      Revenue  YoY_Revenue  Income  YoY_Income  Profit  YoY_Profit
2015    10000          NaN    5000         NaN    2000         NaN
2016    20000     1.000000    6000    0.200000    3000    0.500000
2017    30000     0.500000    7000    0.166667    4000    0.333333
2018    40000     0.333333    8000    0.142857    5000    0.250000
2019    50000     0.250000    9000    0.125000    6000    0.200000

原始
简单的计算和join

df1 = df.join((df / df.shift() - 1).add_prefix('YoY_'))

Out[305]:
      Revenue  Income  Profit  YoY_Revenue  YoY_Income  YoY_Profit
2015    10000    5000    2000          NaN         NaN         NaN
2016    20000    6000    3000     1.000000    0.200000    0.500000
2017    30000    7000    4000     0.500000    0.166667    0.333333
2018    40000    8000    5000     0.333333    0.142857    0.250000
2019    50000    9000    6000     0.250000    0.125000    0.200000
相关问题