熊猫数据框中的逻辑索引

时间:2019-05-01 17:35:36

标签: python pandas indexing

我有一些这样的数据:

+-----------+---------+-------+
| 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视为失败/通过,我想在2个新列中分别汇总失败/通过事件的总计Duration (或1,确保可读性的任何内容)。

我是数据帧的新手,我觉得这里涉及了重要的逻辑索引。解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

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

因此,您将事件和结果分组,然后在工期列中取每个组的总和。

答案 1 :(得分:1)

您也可以尝试:

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