Pandas Group By и условное соотношение - PullRequest
0 голосов
/ 22 мая 2018

Я хочу взять соотношение подсчетов на основе условия, и я изо всех сил пытаюсь сделать это правильно, используя pandas фрейм данных.

Данные приведены ниже:

                   JOB_ROLE           COMMENTS ACTIVITY_TYPE  COUNTS  
             Director-Level  Meeting Requested     EmailSend     490    
              Manager-Level  Meeting Requested     EmailSend     305  
             Non-Managerial  Meeting Requested     EmailSend     272  
     Top Executive; C-Level  Meeting Requested     EmailSend     226  
                   VP-Level  Meeting Requested     EmailSend     185
             Director-Level  Meeting Requested    FormSubmit     131
              Manager-Level  Meeting Requested    FormSubmit      74
     Top Executive; C-Level  Meeting Requested    FormSubmit      61
                   VP-Level  Meeting Requested    FormSubmit      53
             Non-Managerial  Meeting Requested    FormSubmit      52
                      Other  Meeting Requested     EmailSend      20
                      Other  Meeting Requested    FormSubmit       2

Моя попытка выглядит следующим образом:

ratios =  mr_jr.groupby('JOB_ROLE').apply(lambda x: x[x['ACTIVITY_TYPE']=='FormSubmit'].COUNTS / x[x['ACTIVITY_TYPE']=='EmailSend'].COUNTS)

Как правильно применить условие к каждой группе и выполнить арифметику?

Заранее большое спасибо.

РЕДАКТИРОВАНИЕ

Желаемый результат:

print(list(ratios)) # prints: [0.26, 0.24, 0.19, 0.27, 0.28, 0.1]

1 Ответ

0 голосов
/ 22 мая 2018

Выглядит как задание для сводной таблицы.

piv = df.pivot('JOB_ROLE', 'ACTIVITY_TYPE').COUNTS

Вывод:

In [119]: piv.FormSubmit / piv.EmailSend
Out[119]: 
JOB_ROLE
Director-Level            0.267347
Manager-Level             0.242623
Non-Managerial            0.191176
Other                     0.100000
Top Executive; C-Level    0.269912
VP-Level                  0.286486
dtype: float64

Без сводки:

df.set_index('JOB_ROLE', drop=True, inplace=True)
emails = df[df.ACTIVITY_TYPE == 'EmailSend']
forms  = df[df.ACTIVITY_TYPE == 'FormSubmit']
print(forms.COUNTS / emails.COUNTS)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...