根据 Pandas 中的 groupby 获取百分比?

max*_*max 5 python pandas

我有一个像这样的熊猫数据帧:

subject bool Count
1   False   329232  
1   True    73896   
2   False   268338  
2   True    76424   
3   False   186167  
3   True    27078   
4   False   172417  
4   True    113268  
Run Code Online (Sandbox Code Playgroud)

我想Count变成每个科目组的百分比。例如,第 1 行是329232 / (329232 + 73896) = 0.816,第 2 行是73896/ (329232 + 73896) = 0.183。然后,第 2 组的总数将发生变化,依此类推。

这可以通过 groupby 来完成吗?我尝试遍历行但收效甚微。

Pou*_*del 3

这对我有用:


import numpy as np
import pandas as pd

# data
df = pd.DataFrame({'subject': [1, 1, 2, 2, 3, 3, 4, 4],
                   'bool': [False, True, False, True, False, True, False, True],
                   'Count': [329232, 73896, 268338, 76424, 186167, 27078, 172417, 113268]})

# answer
df['Per_Subject_Count_Pct'] = df['Count'].div(
    df.groupby('subject')['Count'].transform(lambda x: x.sum()))
print(df)
Run Code Online (Sandbox Code Playgroud)

给出:

   subject   bool   Count  Per_Subject_Count_Pct
0        1  False  329232               0.816693
1        1   True   73896               0.183307
2        2  False  268338               0.778328
3        2   True   76424               0.221672
4        3  False  186167               0.873019
5        3   True   27078               0.126981
6        4  False  172417               0.603521
7        4   True  113268               0.396479
Run Code Online (Sandbox Code Playgroud)