2017-07-20 19 views
1

評価とブックテーブルを用意しましょう。異なるテーブルのグループの最初の値に値を置き換えます。

RATINGS User-ID ISBN Book-Rating 244662 0373630689 7 19378 0812515595 10 238625 0441892604 9 180315 0140439072 0 242471 3548248950 0

BOOKS ISBN Book-Title Book-Author Year-Of-Publication Publisher 0393000753 A Reckoning May Sarton 1981 W W Norton

の本の多くは、同じ名前と著者が、出版物の異なる出版社や年を持っているので、私はタイトルのグループにそれらをしたいとISBNと評価テーブルにISBNを置き換えますグループ内の最初の行の

より具体的には、グループ化はこの

Book-Name ISBN Name1 A B C Name2 D E Name3 F G

のように見えると私は評価

User-ID ISBN Book-Rating X A 3 X D 6 Y D 1 Z G 8

見えるようにしたい

User-ID ISBN Book-Rating X B 3 X E 6 Y D 1 Z F 8

のような評価場合pivot_tableに必要なメモリを節約するには、

を使用します。データセットはhereです。

私の試みは動作していないよう

book_rating_view = ratings.merge(books, how='left', on='ISBN').groupby(['Book-Title'])['ISBN'] 
ratings['ISBN'].replace(ratings['ISBN'], pd.Series([book_rating_view.get_group(key).min() for key,_ in book_rating_view])) 

の線に沿っていました。別の試みは、減少したテーブルがメモリに収まる必要にもかかわらず、MemoryErrorにつながる

isbn_vector = books.groupby(['Book-Title']).first() 
utility = pd.DataFrame(0, index=explicit_ratings['User-ID'], columns=users['User-ID']) 
for name, group in explicit_ratings.groupby('User-ID'): 
    user_vector = pd.DataFrame(0, index=isbn_vector, columns = [name]) 
    for row, index in group: 
     user_vector[books.groupby(['Book-Title']).get_group(row['ISBN']).first()] = row['Book-Rating'] 
    utility.join(user_vector) 

として直接pivot_tableを構築することでした。

アドバイスありがとうございます!

答えて

0

私はあなたに私たちに少しでも多くのBOOKデータフレームを表示したいと思ってもらいたいと思います。

セイdf1 = RATINGSdf2 = BOOKS

dfm = df2.merge(df1, on='ISBN').groupby('Book-Title').apply(list) 
dfm['Book-Rating'] = dfm['Book-Rating'].map(sum) 
+0

(でも、私は通常、...ストアにデータフレーム内のリストなどのデータをお勧めしません)私はあなたの好みに合わせて(たぶん)質問を編集しました。あなたの提案は何らかの理由でKeyError: 'Book-Rating'を投げます。 – mirgee

+0

また、データセットへのリンクが追加されました。 – mirgee

関連する問題