Если возможно, сначала замените значения прямого заполнения, а затем замените несовпадающие значения, используйте:
df1 = df.ffill(axis=1).fillna(-50)
print (df1)
-438.334631 -436.906133 382.972170 383.068536
-344.226998 -50.0 -49.0 -49.0 -49.0
-342.018475 -50.0 -45.0 -42.0 -42.0
-340.444794 -50.0 -50.0 -50.0 -50.0
-339.102725 -50.0 -50.0 -40.0 -40.0
-338.879633 -50.0 -46.0 -46.0 -46.0
-336.414773 -50.0 -50.0 -46.0 -46.0
Если необходимо сначала заменить первый столбец, а затем значения прямого заполнения:
df.iloc[:, 0] = 50
df1 = df.ffill(axis=1)
Другое решение, только необходимые уникальные имена столбцов:
df = df.assign(**{df.columns[0]:-50}).ffill(axis=1)
print (df)
-438.334631 -436.906133 382.972170 383.068536
-344.226998 -50.0 -49.0 -49.0 -49.0
-342.018475 -50.0 -45.0 -42.0 -42.0
-340.444794 -50.0 -50.0 -50.0 -50.0
-339.102725 -50.0 -50.0 -40.0 -40.0
-338.879633 -50.0 -46.0 -46.0 -46.0
-336.414773 -50.0 -50.0 -46.0 -46.0