pandas合并groupby_Pandas-GroupBy,然后在原始表上合并
我正在嘗試編寫一個函數來匯總并在Pandas中的數據框上執行各種統計數據計算,然后將其合并到原始數據框,但是,我遇到了問題。這與SQL中的代碼等效:
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
出:>>
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
})
在我想加入原始表之前,此方法可以正常工作:
IN:>>
po_account_df = pd.merge(acc_df, po_df, on=['EID','PCODE'], how='inner',suffixes=('_Acc','_Po'))
OUT:>> KeyError:您沒有名為EID的項目
由于某種原因,分組的數據框無法聯接回原始表。我已經研究了嘗試將groupby列轉換為實際列的方法,但這似乎不起作用。
請注意,最終目標是能夠找到每一列(PVALUE,SI,SC,EE)IE的百分比:
pol_acc_df['PVALUE_PCT'] = np.round(pol_acc_df.PVALUE_Po/pol_acc_df.PVALUE_Acc,4)
謝謝!
總結
以上是生活随笔為你收集整理的pandas合并groupby_Pandas-GroupBy,然后在原始表上合并的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql建立 分区_MySQL-mys
- 下一篇: python类中方法相互调用_pytho