Один из способов - создать серию после удаления нулевых значений.
Затем используйте pd.Series.fillna
с pd.Series.map
:
df = pd.DataFrame({'code': [1, 2, 3, 1, 2, 4],
'name': ['A', np.nan, 'C', np.nan, 'B', 'D']})
s = df.set_index('code')['name'].dropna()
df['name'] = df['name'].fillna(df['code'].map(s))
print(df)
code name
0 1 A
1 2 B
2 3 C
3 1 A
4 2 B
5 4 D