熊猫加入一个联盟



我试图将一个排名推荐数据帧与一个包含每个用户真实动作的数据帧连接起来(指示他们是否观看了推荐的电影(。我想先加入id列,然后加入该id的推荐/true_actions。下面是一个例子:

rec_df:                                    labels_df:
id | recommendation | rank |               id | movie 1.| movie2.| movie 3|
----------------------------               --------------------------------
110|  movie 1.      | 1.   |               110|  0.     |   1    |  0
110|  movie 2.      | 2.   |               --------------------------------
110|  movie 3       | 3.   |               210|  1.     |   0    |  1
----------------------------               --------------------------------
210|  movie 1.      | 2.   |
210|  movie 2.      | 1.   |
210|  movie 3       | 3.   |
----------------------------
the desired resulting df after join:
id | recommendation | rank | true_action             
----------------------------------------               
110|  movie 1.      | 1.   |     0      |    
110|  movie 2.      | 2.   |     1      |   
110|  movie 3       | 3.   |     0      |   
----------------------------------------               
210|  movie 1.      | 2.   |     1      |
210|  movie 2.      | 1.   |     0      |
210|  movie 3       | 3.   |     1      |
----------------------------

有没有一种简单的方法可以在熊猫中进行这种类型的加入?非常感谢您提前提供的帮助!

加入前只需压平labels_df

df1['true_action'] = df1.merge(df2.melt('id', var_name='recommendation'), 
on=['id', 'recommendation'], how='left')['value']
print(df1)
# Output
id recommendation  rank  true_action
0  110        movie 1     1            0
1  110        movie 2     2            1
2  110        movie 3     3            0
3  210        movie 1     2            1
4  210        movie 2     1            0
5  210        movie 3     3            1

注意:为了更清晰,我删除了所有拖尾点

最新更新