Python Pandas Соотношение значений в группе к общему количеству для каждой группы - PullRequest
1 голос
/ 28 марта 2019

Я хочу найти отношение количества значений в группе к общему значению в группе, сохраняя при этом другие столбцы.Я использовал группу, чтобы преобразовать свою матрицу в одну, похожую на пример ниже.Я сгруппировал по времени травмы, а затем по типу инцидента, чтобы найти счет каждого инцидента в месяц.

Вместо того, чтобы считать, я хочу, чтобы это был счет / общее количество инцидентов за месяц.

Например, если есть фрейм данных, который выглядит следующим образом.

 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
 ...               ...               ...

Например, дляпервый инцидент Slip на 2017-01.Он будет рассчитан как 4/40 = 0,1, так как общее количество групп (4 + 12 + 19 + 5 = 40).Для второго группового значения проскальзывания это будет 28/50, поскольку (28 + 10 + 2 + 10 = 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 Ответ

1 голос
/ 28 марта 2019

Вы можете использовать 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

См. разделение-применение-объединение документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...