我有一个包含三列的表:user_id
,book_id
和rating
。因此,一行显示用户对图书的评分。
我试图删除与评分少于10本书的用户相对应的行。我做了类似于这个问题的答案Remove low frequency values from pandas.dataframe中描述的内容。这是我的代码:
threshold = 10
value_counts = ratings['user_id'].value_counts()
to_remove = value_counts[value_counts <= threshold].index
ratings.drop(to_remove, axis=0, inplace=True)
当我运行它时,我在最后一行收到错误:
ValueError: labels [40518 21743 30824 <...> 47178 46308 30460] not contained in axis
该表有979478行,因此应存在具有这些索引的行。我做错了什么?
答案 0 :(得分:4)
使用isin
,因为user_id不是索引,我们不能在这里使用.drop
。
threshold = 10
value_counts = ratings['user_id'].value_counts()
to_remove = value_counts[value_counts <= threshold].index
ratings.loc[~ratings['user_id'].isin(to_remove),:]