我想找到一个组中的值计数与该组中的总值的比率,同时还要保留其他列。我使用了group by将矩阵转换为类似于以下示例的矩阵。我按受伤时间和事件类型分组,以查找每月每个事件的计数。
不过,我希望它不是本月的事件计数/总计数。
例如,如果有一个看起来像这样的数据框。
Injury_Time Incident_Type Count
2017-01 Slip 4
2017-01 Concussion 12
2017-01 Struck by 19
2017-01 Exposure 5
2017-02 Slip 28
2017-02 Concussion 10
2017-02 Struck by 2
2017-02 Exposure 10
... ... ...
相反,我希望数据框看起来像这样。
Injury_Time Incident_Type Count
2017-01 Slip 0.1
2017-01 Concussion 0.3
2017-01 Struck by 0.475
2017-01 Exposure 0.125
2017-02 Slip 0.56
2017-02 Concussion 0.2
2017-02 Struck by 0.04
2017-02 Exposure 0.2
... ... ...
例如,2017年1月发生的第一起滑倒事件。由于组总数为(4 + 12 + 19 + 5 = 40),因此它将被计算为4/40 = 0.1。对于第二组滑动值,由于(28 + 10 + 2 + 10 = 50),它将是28/50,因此第一个值是28/50 = 0.56。对于每个组中的每个值也将执行相同的操作。
是否有一个很好的方法可以对数据帧中的每个组执行此操作?
这是用于创建示例数据框的代码。
df = pd.DataFrame([["2017-01", "Slip", 4], ["2017-01", "Concussion", 12], ["2017-01", "Struck by", 19], ["2017-01", "Exposure", 5], ["2017-02", "Slip", 28], ["2017-02", "Concussion", 10], ["2017-02", "Struck by", 2], ["2017-02", "Exposure", 10]], columns=["Injury_Time", "Incident_Type", "Count"])
如有任何疑问,请告诉我。
谢谢您的帮助。
答案 0 :(得分:1)
您可以在此处使用transform:
In [11]: df.groupby("Injury_Time")["Count"].transform("sum")
Out[11]:
0 40
1 40
2 40
3 40
4 50
5 50
6 50
7 50
Name: Count, dtype: int64
In [12]: df["Count"] / df.groupby("Injury_Time")["Count"].transform("sum")
Out[12]:
0 0.100
1 0.300
2 0.475
3 0.125
4 0.560
5 0.200
6 0.040
7 0.200
Name: Count, dtype: float64
请参阅文档中的split-apply-combine section。