在选择列上创建数据透视表后的其他计算

时间:2019-04-10 20:16:59

标签: python pandas pivot-table

我已使用以下代码创建了数据透视表:

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

对不起,年份与列没有正确对齐,但是我无法解决。

2 个答案:

答案 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