Pandas 在联接中联接

Pandas Join within a join

我正在尝试将排名推荐数据框与包含每个用户真实操作的数据框(表明他们是否观看了推荐的电影)结合起来。我想先加入 id 列,然后加入 recommendations/true_actions 以获得该 id。这是一个例子:

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      |
----------------------------

在 pandas 中是否有一种简单的方法来进行这种类型的连接?非常感谢您的提前帮助!

加入前先压平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

注意:为了更清楚,我删除了所有尾随点