Вы можете использовать np.where и Series.isna :
import numpy as np
mg['x'] = np.where(df['X'].isna(), df['X'], df['X']*df['Value'])
Если вы хотите заменить ноль на '..' и умножить другие:
mg['x'] = np.where(df['X'].isna(), '..', df['X']*df['Value'])
Таким образом, где бы значение столбца x не было равно нулю, оно остается неизменным, в противном случае оно умножается на значение соответствующей строки столбца значения
В вашем решении вы можететакже сделайте заполнение (1):
df['x'] = pd.to_numeric(df['x'], errors='coerce').fillna(1)
mg['x'] = df['x'] * df["Value"]
Вот как я пытался:
df = pd.DataFrame({'X': [ 2, np.nan],
'Value': [6, 4]})
df
X Value
0 2.0 6
1 NaN 4
np.where(df['X'].isna(), df['X'], df['X']*df['Value'])
array([12., nan])