Предполагая, что это пустые строки ''
Используйте groupby
с функцией вызова, которая преобразует 'Y'
в 'X'
df.mask(df.eq('')).groupby(lambda x: {'Y': 'X'}.get(x, x), axis=1).first()
0 X
0 1 6
1 2 7
2 3 1
3 4 5
В противном случае игнорируйте mask
df.groupby(lambda x: {'Y': 'X'}.get(x, x), axis=1).first()
0 X
0 1 6
1 2 7
2 3 1
3 4 5