我的 dfdf中有一些資料顯示用戶所屬的 2 個類別。為此,我想查看每個類別對的用戶數,以行的 %total 表示。
原始資料框df:
------ ------ --------
| cat1 | cat2 | user |
------ ------ --------
| A | X | 687568 |
| A | Y | 68575 |
| B | Y | 56478 |
| A | X | 6587 |
| A | Y | 45678 |
| B | X | 5678 |
| B | X | 967 |
| A | X | 345 |
------ ------ --------
我使用以下方法將其轉換為 groupby df:
df2 = df.groupby(['cat1', 'cat2']).agg({'user': 'nunique'}).reset_index().pivot(index='cat1', columns='cat2',values='user')以成對計算每個類別組合的用戶數(這里的數字是由組成的):
------ ---- ----
| cat2 | X | Y |
------ ---- ----
| cat1 | | |
------ ---- ----
| A | 5 | 5 |
| B | 10 | 40 |
------ ---- ----
我想將數字轉換為行(Cat1)的百分比總數,例如第一行,5 /(5 5)= 0.5等等給出:
------ ----- -----
| cat2 | X | Y |
------ ----- -----
| cat1 | | |
| A | 0.5 | 0.5 |
| B | 0.2 | 0.8 |
------ ----- -----
我是否必須在包含逐行總和的分組 df 中創建一個新列,然后遍歷一行中的每個值并將其除以該總數?
uj5u.com熱心網友回復:
您可以簡化運算式:
piv = df.pivot_table('user', 'cat1', 'cat2', aggfunc='nunique')
pct = piv.div(piv.sum(axis=1), axis=0)
輸出:
>>> piv
cat2 X Y
cat1
A 3 2
B 2 1
>>> pct
cat2 X Y
cat1
A 0.600000 0.400000
B 0.666667 0.333333
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417958.html
標籤:
上一篇:R多個正則運算式,資料框列名
