2017-03-15 31 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 
相關問題