我有一个如下所示的数据框:
+---+-----------+----------------+-------+
| | 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)