idx_column = 'X1'
# Дублируем выбранную строку len(df.index)-1 раз
temp = df.loc[[idx_column]*(len(df.index)-1)]
# Умножаем строку на числа из выбранной колонки
temp = temp.mul(df.loc[df.index != idx_column, idx_column].tolist(), axis=0)
# Исправляем названия строк
temp.index = df.loc[df.index != idx_column].index
# Вычитаем из строк выбранную строку умноженную на значения из выбранной колонки
df.loc[df.index != idx_column]=df.loc[df.index != idx_column]-temp