簡體   English   中英

熊貓按一列分組,然后按另一列分組

[英]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組中特定idamount百分比,例如,對於531BB10 amount50amount百分比為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM