如果熊猫数据框的第一列不匹配,则在第二列连接

时间:2020-10-16 05:17:39

标签: python-3.x pandas dataframe join concat

如果熊猫数据框(Python 3.x)的第一列不匹配,我需要能够在第二列匹配。

例如。


table_df = pd.DataFrame ( {
                    'Name': ['James','Tim','John','Emily'],
                    'NickName': ['Jamie','','','Em'],
                    'Colour': ['Blue','Black','Red','Purple']                          
                          })

lookup_df = pd.DataFrame ( {
                    'Name': ['Tim','John','Em','Jamie'],
                    'Pet': ['Cat','Dog','Fox','Dog']   
                    })

table_df

        Name    NickName    Colour
0       James   Jamie        Blue
1       Tim                  Black
2       John    Red
3       Emily   Em           Purple

lookup_df

    Name    Pet
0   Tim     Cat    
1   John    Dog
2   Em      Fox
3   Jamie   Dog

我需要的结果:

    Name    NickName    Colour  Pet
0   James   Jamie       Blue    Dog
1   Tim                 Black   Cat
2   John                Red     Dog
3   Emily   Em          Purple  Fox

(在“名称”列上匹配),如果不匹配,则在“昵称”列上匹配, 我尝试了许多不同的方法,包括:

pd.merge(table_df,lookup_df, how='left', left_on='Name', right_on='Name')
if Nan -> pd.merge(table_df,lookup_df, how='left', left_on='NickName', right_on='Name')

但是它不能满足我的需要,我想避免嵌套循环。 有谁知道如何做到这一点?任何反馈都非常感谢。

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以在mapName,在fillnaNickName

s = lookup_df.set_index("Name")["Pet"]

table_df["pet"] = table_df["Name"].map(s).fillna(table_df["NickName"].map(s))

print (table_df)

    Name NickName  Colour  pet
0  James    Jamie    Blue  Dog
1    Tim            Black  Cat
2   John              Red  Dog
3  Emily       Em  Purple  Fox
相关问题