我正在寻找一种方法或函数,该方法或函数将从索引(或电影名称)中显示最接近的5个索引列表(5个电影列表)
我的数据框:
movie_title movieId Action Adventure Fantasy Sci-Fi Thriller
Avatar 1 1.0 1.0 1.0 1.0 0.0
Spectre 2 1.0 1.0 0.0 0.0 1
John Carter 3 1.0 1.0 0.0 1.0 0.0
将DataFrame放置为矩阵:
df_matrix = userGenreTable.as_matrix(columns=userGenreTable.columns[2:])
计算两个向量之间的距离:
from scipy.spatial import distance
for i in range(len(df_matrix)):
for j in range(len(df_matrix)):
print(distance.euclidean(df_matrix[i,:], df_matrix[j,:]))
我看不到如何计算最近向量的五个索引。
答案 0 :(得分:1)
您可以像这样使用.loc。
# Build the array
arr = np.array([[distance.euclidean(df_matrix .loc[i,'Action':'Thriller'],
df_matrix .loc[j,'Action':'Thriller']) for j in range(len(df))]\
for i in range (len(df))])
# Find the min distance
i,j = np.unravel_index(arr.argmin(), arr.shape)
print([i,j]) # prints the slice location for the minimum euclidean distance.
引用数据框列作为索引很棘手,但是对.loc的更新使我们可以扫描它们的“范围”。希望有帮助!