Логическая индексация в кадрах данных pandas

У меня есть такие данные:

+-----------+---------+-------+
| Duration  | Outcome | Event |
+-----------+---------+-------+
|       421 |       0 |     1 |
|       421 |       0 |     1 |
|       261 |       0 |     1 |
|        24 |       0 |     1 |
|        27 |       0 |     1 |
|       613 |       0 |     1 |
|      2454 |       0 |     1 |
|       227 |       0 |     1 |
|      2560 |       0 |     1 |
|       229 |       0 |     1 |
|      2242 |       0 |     1 |
|      6680 |       0 |     1 |
|      1172 |       0 |     1 |
|      5656 |       0 |     1 |
|      5082 |       0 |     1 |
|      7239 |       0 |     1 |
|       127 |       0 |     1 |
|       128 |       0 |     1 |
|       128 |       0 |     1 |
|      7569 |       1 |     1 |
|       324 |       0 |     2 |
|      6395 |       0 |     2 |
|      6196 |       0 |     2 |
|        31 |       0 |     2 |
|       228 |       0 |     2 |
|       274 |       0 |     2 |
|       270 |       0 |     2 |
|       275 |       0 |     2 |
|       232 |       0 |     2 |
|      7310 |       0 |     2 |
|      7644 |       1 |     2 |
|      6949 |       0 |     3 |
|      6903 |       1 |     3 |
|      6942 |       0 |     4 |
|      7031 |       1 |     4 |
+-----------+---------+-------+

Теперь, для каждого Event, с Outcome 0/1, рассматриваемым как Fail/Pass, я хочу суммировать общее количество Duration событий Fail/Pass отдельно в 2 новых столбцах (или 1, в зависимости от того, что обеспечивает удобочитаемость).

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


person srkdb    schedule 01.05.2019    source источник
comment
не могли бы вы добавить фрейм данных в виде текста и вставить сюда? также, пожалуйста, добавьте ожидаемый фрейм данных, чтобы мы могли увидеть и воспроизвести вопрос. Спасибо   -  person anky    schedule 01.05.2019
comment
Пожалуйста, включите данные фрейма данных в виде текста, а не в виде изображения.   -  person user2314737    schedule 01.05.2019
comment
@anky_91: Пожалуйста, смотрите выше. Это помогает?   -  person srkdb    schedule 01.05.2019
comment
@ user2314737: См. выше. Это помогает?   -  person srkdb    schedule 01.05.2019


Ответы (2)


df.groupby(['Event', 'Outcome'])['Duration'].sum()

Таким образом, вы группируете как по событию, так и по результату, смотрите на столбец продолжительности, а затем берете сумму каждой группы.

person Ben Pap    schedule 01.05.2019

Вы также можете попробовать:

pd.pivot_table(index='Event', 
               columns='Outcome', 
               values='Duration', 
               data=df,
               aggfunc='sum')

который дает вам таблицу с двумя столбцами:

+---------+-------+------+
| Outcome |   0   |  1   |
+---------+-------+------+
| Event   |       |      |
+---------+-------+------+
| 1       | 35691 | 7569 |
| 2       | 21535 | 7644 |
| 3       |  6949 | 6903 |
| 4       |  6942 | 7031 |
+---------+-------+------+
person Quang Hoang    schedule 01.05.2019