I have two data frames.
import pandas 
import numpy as np
data = {'Name': ['Tom', 'Joseph', 'Krish', 'John','rack','rox','selena','jha'], 'Age': [20, 21,np.nan , 18,20,30,np.nan,np.nan]}  
df = pd.DataFrame(data)  
print(df)
# Output :
#   Name    Age
# 0 Tom     20.0
# 1 Joseph  21.0
# 2 Krish   NaN
# 3 John    18.0
# 4 rack    20.0
# 5 rox     30.0
# 6 selena  NaN
# 7 jha     NaN
data = {'Named': ['Raj', 'kir', 'cena','ang'], 'Age': [20, 21,18,30]}  
df1 = pd.DataFrame(data)  
    
print(df1)
# Output :    
#   Named Age
# 0 Raj   20
# 1 kir   21
# 2 cena  18
# 3 ang   30
The df1 is a source data. Now, if the value of age column of df1 matches the column age in df then it has to append the name next to the age column of the df and for suppose if the value in age column of df is null then it shouldn't add anything. It should also be null. It should basically add the name based on the match. As far as I know we can use merge but when I am trying to merge its creating extra rows which is not excepted and the output is also not correct.
Given output and code:
dfinal = df.merge(df, left_on="Age",right_on='Age', how = 'outer')
# My output :       
#        Name_x Age Name_y
#    0  Tom     20.0 Tom
#    1  Tom     20.0 rack
#    2  rack    20.0 Tom
#    3  rack    20.0 rack
#    4  Joseph  21.0 Joseph
#    5  Krish   NaN  Krish
#    6  Krish   NaN  selena
#    7  Krish   NaN  jha
#    8  selena  NaN  Krish
#    9  selena  NaN  selena
#    10 selena  NaN  jha
#    11 jha     NaN  Krish
#    12 jha     NaN  selena
#    13 jha     NaN  jha
#    14 John    18.0 John
#    15 rox     30.0 rox
    
    
# My Excepted Output:
#       Name     Age Named 
#    0  Tom     20.0  Raj
#    1  Joseph  21.0  kir
#    2  Krish   NaN   NaN
#    3  John    18.0  cena
#    4  rack    20.0  Raj
#    5  rox     30.0  ang
#    6  selena  NaN   NaN
#    7  jha     NaN   NaN
 
     
     
    