데이터 세트에서 매년 평균 분기 별 성장률을 계산하는 데 사용하려는 데이터 세트가 있습니다.
지금은 다단계 그룹화가 포함 된 데이터 프레임이 있으며 데이터 세트 내에서 매년에서 gmean
함수 를 적용하고 싶습니다 scipy.stats
.
분기 별 성장률을 얻기 위해 사용하는 코드는 다음과 같습니다.
df.groupby(df.index.year).resample('Q')['Sales'].sum() / df.groupby(df.index.year).resample('Q')['Sales'].sum().shift(1)
결과적으로 이것을 제공합니다.
그래서 기본적으로 저는 2014 년의 기하 평균 (1.162409, 1.659756, 1.250600)을 원하고 2 년마다 다른 분기 별 성장률을 원합니다.
본능적으로 다음과 같이하고 싶습니다.
(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%
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다