Причина в том, что Numpy методы работают не с DataFrames, а с базовыми Numpy массивами, без любых данных индекса или столбца (индексы строк и столбцов)имена).
Чтобы проверить это, запустите: np.hstack([DF1, DF2])
и вы получите:
array([['Yes', 'Yes'],
['No', 'No'],
['Maybe', 'Maybe']], dtype=object)
Чтобы сохранить имена столбцов, используйте, например:
pd.concat([DF1, DF2], axis=1)
Этовремя результат будет:
X Y
0 Yes Yes
1 No No
2 Maybe Maybe