计算没有循环python的评级数

时间:2016-10-22 22:39:41

标签: python pandas dataframe count group-by

在python中,给出一个评级列表:

import pandas as pd
path = 'ratings_ml100k.csv'

data = pd.read_csv(path,sep= ',')
print(data)    
         user_id  item_id  rating
28422      100      690       4  
32020      441      751       4  
15819      145      265       5

项目是:

print(itemsTrain)
[ 690  751  265 ..., 1650 1447 1507]

对于每个项目,我想计算评分数。无论如何不使用循环来做到这一点?所有的想法都很受欢迎,

data是一个pandas数据帧。欲望输出应如下所示:

 pop = 
 item_id   rating_count
 690          120
 751          10
 265          159
  ...         ...

请注意,itemsTrain在评分数据集data中包含唯一的item_ids。

2 个答案:

答案 0 :(得分:3)

你可以这样做:

In [200]: df = pd.DataFrame(np.random.randint(0,8,(15,2)),columns=['id', 'rating'])

In [201]: df
Out[201]:
    id  rating
0    4       6
1    0       1
2    2       4
3    2       5
4    2       7
5    3       5
6    6       1
7    4       3
8    4       3
9    3       2
10   2       4
11   7       7
12   3       1
13   2       7
14   7       3

In [202]: df.groupby('id').rating.count()
Out[202]:
id
0    1
2    5
3    3
4    3
6    1
7    2
Name: rating, dtype: int64

如果您想将结果作为DF(您也可以根据需要命名count列):

In [206]: df.groupby('id').rating.count().to_frame('count').reset_index()
Out[206]:
   id  count
0   0      1
1   2      5
2   3      3
3   4      3
4   6      1
5   7      2 

您还可以计算唯一评分数:

In [203]: df.groupby('id').rating.nunique()
Out[203]:
id
0    1
2    3
3    3
4    2
6    1
7    2
Name: rating, dtype: int64

答案 1 :(得分:1)

您可以使用方法df.groupby()item_id对项目进行分组,然后使用方法count()对评分求和。

请执行以下操作:

# df is your dataframe
                               v # the method allows you to sum values of the previous feature
df.groupby('item_id').rating.count()
      ^                 ^ # the feature you want to sum upon its values
      ^
   # The method allows you to group the samples by the feature "item_id"
   # which is supposed to be unique