[英]pandas groupby one column and then groupby another column
我有一個df
code id amount
BB10 531 20
BB10 531 30
BB10 532 50
BR11 631 10
BR11 632 5
IN20 781 10
IN20 781 20
IN20 781 30
我想先groupby
df
使用code
,並獲得總amount
各組內,
df.groupby('code')['amount'].agg('sum')
那么我想知道特定code
組中特定id
的amount
百分比,例如,對於531
, BB10
amount
為50
, amount
百分比為50%
; 結果df應該看起來像
code id amount pct
BB10 531 50 50%
BB10 532 50 50%
BR11 631 10 66.7%
BR11 632 5 33.3%
IN20 781 60 100%
首先通過兩列sum
,然后得到每個code
划分amount
總數,乘以100
並四舍五入:
df1 = df.groupby(['code','id'], as_index=False)['amount'].sum()
df1['pct']=df1['amount'].div(df1.groupby('code')['amount'].transform('sum')).mul(100).round(1)
print (df1)
code id amount pct
0 BB10 531 50 50.0
1 BB10 532 50 50.0
2 BR11 631 10 66.7
3 BR11 632 5 33.3
4 IN20 781 60 100.0
最后,如果需要百分比,則將值轉換為字符串並添加%
:
df1['pct'] = df1['pct'].astype(str) + '%'
print (df1)
code id amount pct
0 BB10 531 50 50.0%
1 BB10 532 50 50.0%
2 BR11 631 10 66.7%
3 BR11 632 5 33.3%
4 IN20 781 60 100.0%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.