Одним из способов является использование numpy
:
df = pd.DataFrame({'W1': [0, 7], 'W2': [6, np.nan], 'W3': [6, np.nan], 'W4': [3, np.nan],
'L1': [6, 6], 'L2': [7, np.nan], 'L3': [3, np.nan], 'L4': [6, np.nan]})
# split into 2 arrays
df_L = df.loc[:, df.columns.str.startswith('L')].values
df_W = df.loc[:, df.columns.str.startswith('W')].values
# apply comparison logic
A = (df_W > df_L).astype(float)
# apply nan logic
A[np.logical_or(np.isnan(df_L), np.isnan(df_W))] = np.nan
# create dataframe
res = pd.DataFrame(A, columns=['SET'+str(i) for i in range(1, A.shape[1]+1)])
print(res)
SET1 SET2 SET3 SET4
0 0.0 0.0 1.0 0.0
1 1.0 NaN NaN NaN