Если вам нужно то, что вы написали в заголовке этого поста, вы можете выполнить:
' '.join(df.reset_index().values.astype(str).reshape(1, -1).tolist()[0])
В результате вы получите только одну строку со значениями индекса и именами, разделенными с одним пробелом.
Конечно, это решение дает результат, отличный от ожидаемого, но, как вы написали в заголовке, это одна строка.
Редактировать
Чтобы получить ожидаемый результат (фрейм данных со вторым словом, взаимозаменяемым в каждой паре строк):
Определить функцию:
def exchg(grp):
tbl = grp.str.split(' ').tolist()
tbl[0][1], tbl[1][1] = tbl[1][1], tbl[0][1]
return pd.Series(map(lambda row: ' '.join(row), tbl), index=grp.index)
Затем сгруппируйте ваш DataFrame (фактически только имя столбец) в пары и преобразуйте каждую пару, используя вышеуказанную функцию:
df.name.groupby(np.arange(len(df.index)) // 2).transform(exchg)