[PYTHON] 팬더 / 데이터 프레임을 사용하여 가중 평균 계산
PYTHON팬더 / 데이터 프레임을 사용하여 가중 평균 계산
나는 다음 표를 가지고있다. 나는 아래 수식에 따라 각 날짜별로 그룹화 된 가중 평균을 계산하려고합니다. 몇 가지 표준 재래식 코드를 사용하여이 작업을 수행 할 수 있지만이 데이터가 팬더 데이터 프레임에 있다고 가정하면 반복을 통하는 것이 아니라이를 달성하는 더 쉬운 방법이 있습니까?
Date ID wt value w_avg
01/01/2012 100 0.50 60 0.791666667
01/01/2012 101 0.75 80
01/01/2012 102 1.00 100
01/02/2012 201 0.50 100 0.722222222
01/02/2012 202 1.00 80
2012 년 1 월 1 일 в_авг = 0.5 * (60 / съм (60,80,100)) + .75 * (80 / съм (60,80,100)) + 1,0 * (100 / съм (60,80,100))
2012 년 1 월 2 일 в_авг = 0.5 * (100 / съм (100.80)) + 1.0 * (80 / съм (100.80))
해결법
-
==============================
1.나는 2 명의 그룹 멤버들과 함께 이것을 할 것이라고 생각한다.
나는 2 명의 그룹 멤버들과 함께 이것을 할 것이라고 생각한다.
먼저 "가중 평균"을 계산하십시오.
In [11]: g = df.groupby('Date') In [12]: df.value / g.value.transform("sum") * df.wt Out[12]: 0 0.125000 1 0.250000 2 0.416667 3 0.277778 4 0.444444 dtype: float64
이것을 열로 설정하면 그룹으로 묶을 수 있습니다.
In [13]: df['wa'] = df.value / g.value.transform("sum") * df.wt
이제이 열의 합계가 원하는 것입니다.
In [14]: g.wa.sum() Out[14]: Date 01/01/2012 0.791667 01/02/2012 0.722222 Name: wa, dtype: float64
또는 잠재적으로 :
In [15]: g.wa.transform("sum") Out[15]: 0 0.791667 1 0.791667 2 0.791667 3 0.722222 4 0.722222 Name: wa, dtype: float64
-
==============================
2.예제 팬더 데이터 프레임을 먼저 만들어 보겠습니다.
예제 팬더 데이터 프레임을 먼저 만들어 보겠습니다.
In [1]: import numpy as np In [2]: import pandas as pd In [3]: index = pd.Index(['01/01/2012','01/01/2012','01/01/2012','01/02/2012','01/02/2012'], name='Date') In [4]: df = pd.DataFrame({'ID':[100,101,102,201,202],'wt':[.5,.75,1,.5,1],'value':[60,80,100,100,80]},index=index)
그런 다음 '값'으로 가중되고 색인으로 그룹화 된 'wt'의 평균은 다음과 같이 구합니다.
In [5]: df.groupby(df.index).apply(lambda x: np.average(x.wt, weights=x.value)) Out[5]: Date 01/01/2012 0.791667 01/02/2012 0.722222 dtype: float64
또는 함수를 정의 할 수도 있습니다.
In [5]: def grouped_weighted_avg(values, weights, by): ...: return (values * weights).groupby(by).sum() / weights.groupby(by).sum() In [6]: grouped_weighted_avg(values=df.wt, weights=df.value, by=df.index) Out[6]: Date 01/01/2012 0.791667 01/02/2012 0.722222 dtype: float64
-
==============================
3..csv 파일에 테이블을 저장했습니다.
.csv 파일에 테이블을 저장했습니다.
df=pd.read_csv('book1.csv') grouped=df.groupby('Date') g_wavg= lambda x: np.average(x.wt, weights=x.value) grouped.apply(g_wavg)
-
==============================
4.다음은이 문제에 대한 우아한 해결책입니다. (여러 열을 사용하는 Pandas DataFrame 집계 함수)
다음은이 문제에 대한 우아한 해결책입니다. (여러 열을 사용하는 Pandas DataFrame 집계 함수)
grouped = df.groupby('Date') def wavg(group): d = group['value'] w = group['wt'] return (d * w).sum() / w.sum() grouped.apply(wavg)
from https://stackoverflow.com/questions/26205922/calculate-weighted-average-using-a-pandas-dataframe by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 컴파일 된 확장 기능을위한 PyCharm 자동 완성 (0) | 2018.11.13 |
---|---|
[PYTHON] 사전 조회를 사용하여 목록의 요소를 대체하는 방법 (0) | 2018.11.13 |
[PYTHON] 장고에서 FileField 로컬 파일을 할당하는 방법? (0) | 2018.11.13 |
[PYTHON] WCF와 파이썬 (0) | 2018.11.12 |
[PYTHON] Python (팬더) 멀티 인덱스 데이터 프레임의 각 레벨에 부분합 추가 (0) | 2018.11.12 |