日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas合并groupby_Pandas-GroupBy,然后在原始表上合并

發布時間:2023/12/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,然后在原始表上合并的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。