熊猫:如何将一个数据框的值映射到另一个数据框?

时间:2020-01-06 16:18:42

标签: python pandas dataframe

我是Python的新手,只是学习了一些用例。

我有2个数据框,一个是在“国家/地区”列中需要值的地方,另一个是在名为“国家/地区”列中的值,需要在主数据框中引用名为“数据'。 (如果已经回答了这个问题,请接受我的道歉)

下面是主数据框:

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        |

以下是引用的数据框:

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方法,但无法真正实现结果。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

似乎所有内容都已排序,因此您可以按索引合并

mdf.merge(rdf, left_index=True, right_index=True)