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

问题描述 投票:1回答:2

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

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

对不起,年份与列没有正确对齐,但我无法修复它。

python pandas pivot-table
2个回答
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)

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

© www.soinside.com 2019 - 2024. All rights reserved.