나는 Pandas의 데이터 프레임에 다양한 통계 계산을 집계하고 수행하는 기능을 작성하려고하지만 원래 데이터 프레임에 병합합니다. 문제가 발생했습니다.Pandas - GroupBy 다음 원본 테이블에 병합
SELECT EID,
PCODE,
SUM(PVALUE) AS PVALUE,
SUM(SQRT(SC*EXP(SC-1))) AS SC,
SUM(SI) AS SI,
SUM(EE) AS EE
INTO foo_bar_grp
FROM foo_bar
GROUP BY EID, PCODE
그리고 원래의 테이블에 조인 : 여기
SELECT *
FROM foo_bar_grp INNER JOIN
foo_bar ON foo_bar.EID = foo_bar_grp.EID
AND foo_bar.PCODE = foo_bar_grp.PCODE
이 단계는 다음과 같습니다 >>
pol_dict = {'PID':[1,1,2,2],
'EID':[123,123,123,123],
'PCODE':['GU','GR','GU','GR'],
'PVALUE':[100,50,150,300],
'SI':[400,40,140,140],
'SC':[230,23,213,213],
'EE':[10000,10000,2000,30000],
}
pol_df = DataFrame(pol_dict)
pol_df
: 데이터 IN 로딩이 SQL의 코드와 동일
OUT : >>
EID EE PCODE PID PVALUE SC SI
0 123 10000 GU 1 100 230 400
1 123 10000 GR 1 50 23 40
2 123 2000 GU 2 150 213 140
3 123 30000 GR 2 300 213 140
2 단계 : 데이터 계산 및 그룹화 다음과 같이
내 팬더 코드는 다음과 같습니다
#create aggregation dataframe
poagg_df = pol_df
del poagg_df['PID']
po_grouped_df = poagg_df.groupby(['EID','PCODE'])
#generate acc level aggregate
acc_df = po_grouped_df.agg({
'PVALUE' : np.sum,
'SI' : lambda x: np.sqrt(np.sum(x * np.exp(x-1))),
'SC' : np.sum,
'EE' : np.sum
})
내가 원래 테이블에 가입 할 때까지 잘 작동 :
입력 : >>
po_account_df = pd.merge(acc_df, po_df, on=['EID','PCODE'], how='inner',suffixes=('_Acc','_Po'))
OUT : >> KeyError : u'n o EID라는 항목 '
어떤 이유로 그룹화 된 데이터 프레임을 원래 테이블에 다시 조인 할 수 없습니다. groupby 열을 실제 열로 변환하는 방법을 살펴 봤지만 작동하지 않는 것 같습니다.
pol_acc_df['PVALUE_PCT'] = np.round(pol_acc_df.PVALUE_Po/pol_acc_df.PVALUE_Acc,4)
감사 :
주의는, 최종 목표는 각 열의 비율 (유의 확률, SI, SC, EE) IE를 찾을 수있을 것입니다!