Я думаю, что нужно:
df = pd.DataFrame({'opt1':['',np.nan,'a','a','a',np.nan],
'opt2':[np.nan,'b',np.nan,'b','b',np.nan],
'opt3':['c','Null',np.nan,'c',np.nan,np.nan]})
print (df)
opt1 opt2 opt3
0 NaN c
1 NaN b Null
2 a NaN NaN
3 a b c
4 a b NaN
5 NaN NaN NaN
#replace strings Null and empty strins to NaN
df1 = df.mask(df.isin(['Null','']))
#join values per rows with filter out NaNs
df['var'] = df1.apply(lambda x: '|'.join(x.dropna()), 1)
print (df)
opt1 opt2 opt3 var
0 NaN c c
1 NaN b Null b
2 a NaN NaN a
3 a b c a|b|c
4 a b NaN a|b
5 NaN NaN NaN