python - 计算 Pandas 多级指数特定级别的增长率

标签 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.659756, 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)

但这行不通。

最佳答案

我不知道你的数据是什么样的,所以我将制作一些随机样本数据:

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%

关于python - 计算 Pandas 多级指数特定级别的增长率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58716906/

相关文章:

python - python 中的 Scipy Detrend

python - 如何将 C++ python 扩展导入到另一个目录中的模块中?

javascript - 如何停止 Django 线程

python - 如何按顺序删除 Pandas 数据框中的特定值?

python - 遍历 df 的所有值以替换零值

python - Pandas DataFrame.values 转换错误或功能?

python - 如何使用 "upper"和 "lower"值构建一致的离散颜色图/颜色条

python - 使用 argparse 读取默认参数

python - 使用合并单元格 reshape Dataframe pandas

Python/ Pandas /日期时间 : transform entire lists in a column to datetime