首页 > 解决方案 > 根据列中的值匹配两个 Pandas DataFrame

问题描述

我正在尝试根据不同的几个变量将求职者与导师匹配,这有望创造出良好的匹配。我试图根据经验、位置、期望的工作等连接两个 Pandas DataFrame(一个用于候选人,一个用于导师)。

例如,我有一个可能如下所示的导师 DataFrame:

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

以及如下所示的相应候选 DataFrame:

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

将候选人与导师联系起来的 DataFrame 可能如下所示。

    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

请注意,导师的 DataFrame 将比每个候选人都应该收到的候选人大。

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

PS 我知道这可能读起来像一个家庭作业问题,但它的应用程序是通过将他们与他们感兴趣的职业领域的导师配对来帮助分离服务成员和退伍军人找到工作。

标签: pythonpandas

解决方案


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

我使用了您的导师_df,以及以下候选者_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候选人或导师。

祝你好运!


推荐阅读