在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。
答案 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