我使用以下代码创建了一个数据透视表:
q2=q1.pivot(index='state', columns='year', values='wtrate')
我重塑一个很长的数据集(每个州每年有10个观察值),我保存变量wtrate的值。现在,我想计算不同时间段的复合年增长率(比如说2008年到2019年以及2014 - 2019年)并将其添加为列。 (CAGR是(结束值/起始值)^(1 / n)-1,其中n是年数)。似乎我应该创建一个函数并使用aggfunc应用它,但我不知道如何这样做,因为我没有将函数应用于表中的所有值,而是根据“列”选择更长的列。 (这引出了另一个问题,即:我可以按年选择列吗?为什么这种数据透视表格式阻止我这样做 - 例如,说q2.2008或q2 ['2008']会导致错误。 )
谢谢你的帮助。请参阅下面的数据透视表。
year 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
state
Connecticut 14.377595 16.698319 18.170756 19.469117 21.618318 23.231428 24.135471 25.523063 26.424191 28.025954 35.782651 38.541251
Delaware 3.987193 4.816631 3.541428 3.744169 5.032608 6.912063 7.617630 8.013958 9.221290 11.234383 13.287280 14.908855
Illinois 9.297402 9.912991 9.694201 9.212093 10.322511 11.178365 17.523890 21.215137 21.982069 23.910823 24.702551 25.77111
对不起,年份与列没有正确对齐,但我无法修复它。
这个怎么样?
cagr = lambda df, start, end: (df[end]/df[start])**(1/((end-start)+1))-1
q2['CAGR_08'] = cagr(q2, 2008, 2019)
q2['CAGR_14'] = cagr(q2, 2014, 2019)
如果您创建一个新的数据帧q3
q3 = 1+q2.pct_change(axis = 1)
并做
from scipy.stats.mstats import gmean
然后你可以获得一段时间的CGAR
gmean(q3.loc[state,beginning_year+1:ending_year])-1
但是,请确保将列名转换为int
。