我已使用以下代码创建了数据透视表:
q2=q1.pivot(index='state', columns='year', values='wtrate')
我重整了一个很长的数据集(每个州每年有10个观测值),然后保存了可变wtrate中的值。现在,我要计算不同时间段的CAGR(假设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
对不起,年份与列没有正确对齐,但是我无法解决。
答案 0 :(得分:2)
怎么样?
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)
答案 1 :(得分:0)
如果您以
创建新的数据框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
。