计算熊猫特定级别的多级索引的增长率

时间:2019-11-05 17:52:01

标签: python pandas

我有一个数据集,我想用它来计算平均季度增长率,并按数据集中的每年细分。

现在,我有一个具有多级分组的数据框,我想将gmean中的scipy.stats函数应用于数据集中的每一年。

我用来获取季度增长率的代码如下:

df.groupby(df.index.year).resample('Q')['Sales'].sum() / df.groupby(df.index.year).resample('Q')['Sales'].sum().shift(1)

这是给我的结果:

enter image description here

所以基本上我想要2014年的几何平均值(1.162409、1.665956、1.250600),以及每隔一年的其他季度增长率。

本能地,我想做这样的事情:

(df.groupby(df.index.year).resample('Q')['Sales'].sum() / df.groupby(df.index.year).resample('Q')['Sales'].sum().shift(1)).apply(gmean, level=0)

但这不起作用。

1 个答案:

答案 0 :(得分:2)

我不知道您的数据是什么样子,所以我将随机抽取一些数据:

dates = pd.date_range('2014-01-01', '2017-12-31')
n = 5000

np.random.seed(1)
df = pd.DataFrame({
    'Order Date': np.random.choice(dates, n),
    'Sales': np.random.uniform(1, 100, n)
})

  Order Date      Sales
0 2016-11-27  82.458720
1 2014-08-24  66.790309
2 2017-01-01  75.387001
3 2016-06-24   9.272712
4 2015-12-17  48.278467

和代码:

# Total sales per quarter
q = df.groupby(pd.Grouper(key='Order Date', freq='Q'))['Sales'].sum()

# Q-over-Q growth rate
q = (q / q.shift()).fillna(1)

# Y-over-Y growth rate
from scipy.stats import gmean
y = q.groupby(pd.Grouper(freq='Y')).agg(gmean) - 1
y.index = y.index.year
y.index.name = 'Year'

y.to_frame('Avg. Quarterly Growth').style.format('{:.1%}')

结果:

        Avg. Quarterly Growth
Year                    
2014                    -4.1%
2015                    -0.7%
2016                     3.5%
2017                    -1.1%
相关问题