熊猫:给出列表中的出现次数

时间:2017-03-15 15:50:55

标签: python pandas

假设我有类似的东西

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()

1 个答案:

答案 0 :(得分: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
相关问题