Python 3.x 如果数据帧的第一列不匹配,则在第二列上联接
如果pandas数据帧(Python3.x)的第一列不匹配,我需要能够在第二列上进行匹配 前 表2Python 3.x 如果数据帧的第一列不匹配,则在第二列上联接,python-3.x,pandas,dataframe,join,concat,Python 3.x,Pandas,Dataframe,Join,Concat,如果pandas数据帧(Python3.x)的第一列不匹配,我需要能够在第二列上进行匹配 前 表2 Name NickName Colour 0 James Jamie Blue 1 Tim Black 2 John Red 3 Emily Em Purple 查找 Name Pet 0 Tim Cat
Name NickName Colour
0 James Jamie Blue
1 Tim Black
2 John Red
3 Emily Em Purple
查找
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')
但它并不能满足我的需要,我希望避免使用嵌套循环。
有人知道怎么做吗?非常感谢您的反馈
谢谢 您可以在
Name
上map
和NickName
上fillna
:
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
只需执行两次
merge
,一次在Namw
上,另一次在昵称上
谢谢@叶亨利
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