我有一个像这样的熊猫数据帧:
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 来完成吗?我尝试遍历行但收效甚微。
这对我有用:
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)