按数据帧计算分类数据pandas组

met*_*rsk 2 python pandas

我有一个如下所示的数据框:

+---+-----------+----------------+-------+
|   |    uid    |      msg       | count |
+---+-----------+----------------+-------+
| 0 | 121437681 | eis            |     1 |
| 1 |  14403832 | eis            |     1 |
| 2 | 190442364 | eis            |     1 |
| 3 | 190102625 | eis            |     1 |
| 4 | 190428772 | eis_reply      |     1 |
| 5 | 190428772 | single_message |     1 |
| 6 | 190428772 | yes            |     1 |
| 7 | 190104837 | eis            |     1 |
| 8 | 144969454 | eis            |     1 |
| 9 | 190738403 | eis            |     1 |
+---+-----------+----------------+-------+
Run Code Online (Sandbox Code Playgroud)

我想做的是msg为每个uid 计算每个实例.

我创建了一个groupby对象,并找到了所有消息的计数:

grouped_test = test.groupby('uid')
grouped_test.count('msg') 
Run Code Online (Sandbox Code Playgroud)

但我不太清楚如何为每个uid计算每种类型的消息.我正在考虑创建掩码和4个独立的数据帧,但这似乎不是实现此目的的有效方法.

示例数据 - http://www.sharecsv.com/s/16573757eb123c5b15cae4edcb7296e3/sample_data.csv

Bre*_*arn 14

按uid分组并应用于value_countsmsg列:

>>> d.groupby('uid').msg.value_counts()
uid                      
14403832   eis               1
121437681  eis               1
144969454  eis               1
190102625  eis               1
190104837  eis               1
190170637  eis               1
190428772  eis               1
           single_message    1
           yes               1
           eis_reply         1
190442364  eis               1
190738403  eis               1
190991478  single_message    1
           eis_reply         1
           yes               1
191356453  eis               1
191619393  eis               1
dtype: int64
Run Code Online (Sandbox Code Playgroud)