在Pandas中部分旋转桌子

时间:2019-04-24 10:22:37

标签: pandas dataframe pivot

我有一个包含用户评论的表格(数字完全由虚构):

| 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文档中找不到任何类似的内容。

1 个答案:

答案 0 :(得分:1)

首先将DataFrame.pivotDataFrame.fillnaDataFrame.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