2017-03-15 32 views
1

比方说,我有这样的事情大熊猫:获得给定一个列表出现次数的计数

user_id,service 
------------------ 
user_1,service1 
user_2,service1 
user_3,service2 
user_1,service2 
user_3,service1 
user_3,service2 

而我想有最终是这样的:

user_id, service1, service2 
---------------------------- 
user_1, 1, 1 
user_2, 1, 0 
user_3, 1, 2 

到目前为止,这里是我的代码:

data = pandas.read_csv('dataset.csv') 

service_by_user = data['service'].groupby(data['user_id']) 

count_occurences_services = service_by_user.apply(pandas.value_counts) 

所以我得到的是这样我的代码:

user_1 service1 1 
     service2 1 
user_2 service1 1 
     service2 0 
user_3 service1 1 
     service2 2 

但后来我不知道怎么去我想要什么 注:我有更多的用户和服务比这个例子,并不是所有用户都使用所有的服务,其实大部分使用最多3或4在所有服务中。 我有一个阵列中使用的所有服务,这一点:

service_by_user = data.set_index('user_id') 
list_services = service_by_user.service.unique() 

回答

2

您可以使用pivot_table

data.pivot_table(index=['user_id'], columns=['service'], aggfunc='size', fill_value=0) 

service service1 service2 
user_id      
user_1   1   1 
user_2   1   0 
user_3   1   2 

通过一些额外的格式:

data.pivot_table(index=['user_id'], columns=['service'], aggfunc='size', fill_value=0) \ 
    .rename_axis(None, axis=1) \ 
    .reset_index() 

    user_id service1 service2 
0 user_1   1   1 
1 user_2   1   0 
2 user_3   1   2 
相关问题