Поворот стола частично в Пандах - PullRequest
1 голос
/ 24 апреля 2019

У меня есть таблица, содержащая отзывы пользователей (цифры полностью составлены):

| user_id | vote | votes_for_user | average_user_vote | ISBN_categ |
   213       4.5        12                  3.4             1 
   563       3.7        74                  2.3             2
   213       1.2        12                  3.6             3 
   213       3.2        74                  2.1             2
   213       1.9        12                  3.8             4 
   563       1.4        74                  2.6             1
   563       5.0        74                  2.9             4

Я хочу поместить vote каждого пользователя в соответствующий столбец, возглавляемый значением ISBN_categ, с 0, где голосов нет, где дано.

| user_id | votes_for_user | average_user_vote | ISBN_cat_1 | ISBN_cat_2 | ISBN_cat_3 | ISBN_cat_4 |
   213           12               3.4                4.5          3.2           1.2        1.9
   563           74               2.3                1.4          3.7           0.0        5.0

Обратите внимание, как, из-за того, что пользователь 563 не голосовал за книгу № 3 (ISBN_cat_3 во второй таблице или 3 в ISBN_categ в первой таблице)назначенное значение - 0,0

Я понимаю, что это какое-то вращение таблицы, однако я не могу найти ничего подобного в документации Pandas.

1 Ответ

1 голос
/ 24 апреля 2019

Сначала используйте DataFrame.pivot с DataFrame.fillna и DataFrame.add_prefix, а затем при необходимости удалите дубликаты на DataFrame.drop_duplicatesи DataFrame.join вместе:

df1 = df.pivot('user_id','ISBN_categ','vote').fillna(0).add_prefix('ISBN_cat_')

df = df.drop_duplicates('user_id').join(df1, on='user_id').drop('vote', axis=1)
print (df)
   user_id  votes_for_user  average_user_vote  ISBN_categ  ISBN_cat_1  \
0      213              12                3.4           1         4.5   
1      563              74                2.3           2         1.4   

   ISBN_cat_2  ISBN_cat_3  ISBN_cat_4  
0         3.2         1.2         1.9  
1         3.7         0.0         5.0  
...