根据列中的值匹配两个熊猫数据帧



我正在尝试根据不同的几个变量将求职者与导师相匹配,希望能创造一个良好的匹配。有两个Pandas数据帧(一个用于候选人,一个用于导师),我正在尝试根据经验,位置,所需的工作等进行连接。

例如,我有一个导师数据帧,可能如下所示:

mentor_df = pd.DataFrame({
"Mentor":["Bob", "Kate", "Joe", "Mark"],
"Experience":[3, 4, 5, 4],
"Location": ["US", "FR", "JP", "US"],
"Industry": ["Tech", "Tech", "Media", "Medicine"]
})
Mentor  Experience Location Industry
0  Bob     3         US       Tech
1  Kate    4         FR       Tech
2  Joe     5         JP       Media
2  Mark    4         US       Medicine

以及如下所示的相应候选数据帧:

candidate_df = pd.DataFrame({
"Candidate":["Candidate 1", "Candidate 2", "Candidate 3"],
"Experience":[4, 4, 5],
"Location": ["US", "FR", "JP", "US"],
"Industry": ["Tech", "Media", "Medicine"]
})
Candidate      Experience Location Industry
0  Candidate 1    4         US        Tech
1  Canidate  2    4         FR        Media
2  Canidate  3    5         JP        Medicine

将候选人与导师连接起来的生成的数据帧可能如下所示。

Mentor  Experience Location Candidate    Industry
0  Bob     3         US       NaN          NaN
1  Kate    4         FR       Candidate 2  Tech
2  Joe     5         JP       Candidate 3  Media
2  Mark    4         US       Candidate 1  Medicine

请注意,导师的数据帧将大于每个候选人应收到的候选人。

关于如何最好地解决这个问题的任何想法将不胜感激:)

附言我知道这可能读起来像一个家庭作业问题,但它旨在通过将他们与他们感兴趣的职业领域的导师配对来帮助匹配分离的军人和退伍军人找到工作。

@Henry走在正确的道路上。您需要将候选数据帧修改为 a) 确保所有数组的长度相同(如果没有数组,则添加NaNs,以及 b) 稍作调整以确保您确实有一些匹配项。

我使用了您的mentor_df和以下candidate_df:

candidate_df = pd.DataFrame({
"Candidate":["Candidate 1", "Candidate 2", "Candidate 3", "Candidate 4"],
"Experience":[4, 4, 5, 4],
"Location": ["US", "FR", "JP", "US"],
"Industry": ["Tech", "Media", "Medicine", "Medicine"]
})

然后合并工作正常:

merged = mentor_df.merge(candidate_df, how='left')

输出:

Mentor  Experience Location  Industry    Candidate
0    Bob           3       US      Tech          NaN
1   Kate           4       FR      Tech          NaN
2    Joe           5       JP     Media          NaN
3   Mark           4       US  Medicine  Candidate 4

请注意,在同时拥有候选人和导师之前,您需要到达最后一行,因为这是在经验、地点和行业上匹配的,除非这三者都匹配,否则您会在候选人或导师中得到NaN

祝你好运!

最新更新