df_ratings
約100万行3列のパンダデータフレームがあります。
このデータフレーム内のデータを取得し、それに変換を適用して、という名前のnumpy行列内に配置したいと思います。 ratings_matrix
これを実現するために、次のコードを作成しました。
for i in range(df_ratings.shape[0]): #fill matrix with ratings. zero = unrated
current_user = df_ratings.iloc[i, 0] - 1
current_movie = rated_movies_dictionary[df_ratings.iloc[i, 1]]
current_rating = df_ratings.iloc[i, 2]
ratings_matrix[current_movie, current_user] = current_rating
それは動作しますが、非常に遅いです。forループ内のデータフレームのすべての行を反復処理するのは時間がかかります。これを行うためのより速い方法はありますか?
cuser = df_ratings.iloc[:, 0].values - 1
cmvie = df_ratings.iloc[:, 1].map(rated_movies_dictionary).values
crate = df_ratings.iloc[:, 2].values
ratings_matrix[cmvie, cuser] = crate
コメントへの回答
.valuesは何かを追加しますか?–マールテンファブレ
はい!多くのことを行うときは、多くの場合、numpy配列を使用する方がパフォーマンスが高くなります。最終的な目標はスライスの割り当てを行うことなので、すべてをnumpy配列に入れたかったのです。簡単なデモンストレーションとして、timeit
パンダシリーズとそのシリーズのnumpy配列をスライスしながら実行しました。
%timeit np.arange(4)[pd.Series([1, 2, 3])]
%timeit np.arange(4)[pd.Series([1, 2, 3]).values]
111 µs ± 2.25 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
61.1 µs ± 2.7 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加