首页 > 解决方案 > Pandas:如何将 Dataframe 的值映射到另一个 Dataframe?

问题描述

我对 Python 完全陌生,只是在学习一些我拥有的用例。

我有 2 个数据框,一个是我需要 Country 列中的值的地方,另一个是在名为“Countries”的列中的值,需要在主数据框中映射名为“Data”的列。(如果这个问题已经回答,请接受我的道歉)

以下是主要数据框:

Name Data                     | Country
----------------------------- | ---------
Arjun Kumar Reddy las Vegas   |
Divya london Khosla           |
new delhi Pragati Kumari      |
Will London Turner            |
Joseph Mascurenus Bombay      |
Jason New York Bourne         |
New york Vice Roy             |
Joseph Mascurenus new York    |
Peter Parker California       |
Bruce (istanbul) Wayne        |

下面是引用的DataFrame:

Data           | Countries
-------------- | ---------
las Vegas      | US
london         | UK
New Delhi      | IN
London         | UK
bombay         | IN
New York       | US
New york       | US
new York       | US
California     | US
istanbul       | TR
Moscow         | RS
Cape Town      | SA

我想要的结果如下所示:

Name Data                     | Country
----------------------------- | ---------
Arjun Kumar Reddy las Vegas   | US
Divya london Khosla           | UK
new delhi Pragati Kumari      | IN
Will London Turner            | UK
Joseph Mascurenus Bombay      | IN
Jason New York Bourne         | US
New york Vice Roy             | US
Joseph Mascurenus new York    | US
Peter Parker California       | US
Bruce (istanbul) Wayne        | TR

请注意,两个数据框的大小都不相同。我虽然使用 map 或 Fuzzywuzzy 方法,但无法真正达到结果。

标签: pythonpandasdataframe

解决方案


在参考数据框中找到匹配的国家/地区键并提取它。

regex = '(' + ')|('.join(ref_df['Data']) + ')'
df['key'] = df['Name Data'].str.extract(regex, flags=re.I).bfill(axis=1)[0]

>>> df
                     Name Data        key
0  Arjun Kumar Reddy las Vegas  las Vegas
1       Bruce (istanbul) Wayne   istanbul
2   Joseph Mascurenus new York   new York


>>> ref_df
        Data Country
0  las Vegas      US
1   new York      US
2   istanbul      TR

合并提取的密钥上的两个数据帧。

pd.merge(df, ref_df, left_on='key', right_on='Data')
                     Name Data        key       Data Country
0  Arjun Kumar Reddy las Vegas  las Vegas  las Vegas      US
1       Bruce (istanbul) Wayne   istanbul   istanbul      TR
2   Joseph Mascurenus new York   new York   new York      US

推荐阅读