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
注意:为了更清楚,我删除了所有尾随点
我正在尝试将排名推荐数据框与包含每个用户真实操作的数据框(表明他们是否观看了推荐的电影)结合起来。我想先加入 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
注意:为了更清楚,我删除了所有尾随点