Python熊猫行总和由多列分组

时间:2019-06-27 06:48:47

标签: python pandas

我有一个具有以下结构的数据框,

| Date       |   Item | Location | Event   |
|------------|-------:|----------|---------|
| 01-06-2019 | Item_1 | Loc_1    | Event_1 |
| 01-06-2019 | Item_1 | Loc_1    | Event_1 |
| 02-06-2019 | Item_1 | Loc_1    | Event_1 |
| 02-06-2019 | Item_1 | Loc_1    | Event_2 |
| 02-06-2019 | Item_1 | Loc_2    | Event_2 |
| 02-06-2019 | Item_2 | Loc_1    | Event_3 |
| 03-06-2019 | Item_2 | Loc_1    | Event_3 |
| 03-06-2019 | Item_2 | Loc_1    | Event_3 |

我想参考一天中的项目+位置来计算发生的事件数。 结果如下,

| Date       |   Item | Location | Event_1 | Event_2 | Event_3 |
|------------|-------:|----------|---------|---------|---------|
| 01-06-2019 | Item_1 | Loc_1    | 2       | 0       | 0       |
| 02-06-2019 | Item_1 | Loc_1    | 1       | 1       | 0       |
| 02-06-2019 | Item_1 | Loc_2    | 0       | 1       | 0       |
| 02-06-2019 | Item_2 | Loc_1    | 0       | 0       | 1       |
| 03-06-2019 | Item_2 | Loc_1    | 0       | 0       | 2       |

尝试过熊猫pivot_table,无法获得我想要的结果。

谢谢!

1 个答案:

答案 0 :(得分:6)

crosstabDataFrame.reset_index一起使用:

df1 = pd.crosstab([df['Date'], df['Item'], df['Location']], df['Event']).reset_index()
print (df1)
Event        Date    Item Location  Event_1  Event_2  Event_3
0      01-06-2019  Item_1    Loc_1        2        0        0
1      02-06-2019  Item_1    Loc_1        1        1        0
2      02-06-2019  Item_1    Loc_2        0        1        0
3      02-06-2019  Item_2    Loc_1        0        0        1
4      03-06-2019  Item_2    Loc_1        0        0        2

替代解决方案:

df1=df.groupby(['Date','Item','Location','Event']).size().unstack(level = -1,fill_value=0).reset_index()