Python Pandas每个组的组值与组总数之比

时间:2019-03-27 23:12:56

标签: python pandas numpy aggregate pandas-groupby

我想找到一个组中的值计数与该组中的总值的比率,同时还要保留其他列。我使用了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"])

如有任何疑问,请告诉我。

谢谢您的帮助。

1 个答案:

答案 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