刚开始使用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')
答案 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