Просто индексируйте первую строку, тогда ваш код должен работать:
tup = tuple((0.5 * x, 1.5 * x) for x in df.values.tolist()[0])
print(tup)
# ((2.5, 7.5), (3.5, 10.5), (1.0, 3.0), (2.0, 6.0))
Это работает, потому что
df.values.tolist()[0]
# [5.0, 7.0, 2.0, 4.0]
Возвращает список всех элементов только в первой строке.Теперь итерация, как вы делаете, будет работать.
Если вам это нужно для работы с несколькими строками, вы можете преобразовать это во вложенный цикл или использовать chain.from_iterable
.
from itertools import chain
tup = tuple(
(0.5 * x, 1.5 * x) for x in chain.from_iterable(df.values.tolist()))
print(tup)
# ((2.5, 7.5), (3.5, 10.5), (1.0, 3.0), (2.0, 6.0))