我有一个包含用户评论的表格(数字完全由虚构):
| 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或第一个表中的ISBN_categ为3),分配值是0.0
我知道这是表格的一种透视,但是在Pandas文档中找不到任何类似的内容。
答案 0 :(得分:1)
首先将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