Мне нужно транспонировать входной фрейм данных в столбцы входных значений ( столбцы значений могут быть от 1 до n ):
входной фрейм данных:
|dim1|dim2| byvar|value1|value2|
| 101| 102|MTD0001| 1| 10|
| 201| 202|MTD0002| 2| 12|
| 301| 302|MTD0003| 3| 13|
Используя стек и selectExpr, последние столбцы значений транспонируются, как показано ниже:
result = df.selectExpr('dim1', 'dim2', 'byvar',
"stack(2, 'v1', v1, 'v2', v2) as (names, values)")
выходной фрейм данных:
|dim1|dim2| byvar| names|values|
| 101| 102|MTD0001|value1| 1|
| 101| 102|MTD0001|value2| 10|
| 201| 202|MTD0002|value1| 2|
| 201| 202|MTD0002|value2| 12|
| 301| 302|MTD0003|value1| 3|
| 301| 302|MTD0003|value2| 13|
Но во время динамического вставления возникает ошибка список столбцов в стеке:
l = []
seperator = ', '
A = ['value1', 'value2'] # If this is acheived i will take columns from df.columns
B = seperator.join(A).split(",")
n = len(A)
for a in range(len(A)):
l.append("'{}'".format(A[a]) + "," + B[a])
k = seperator.join(l)
Для понимания k = 'значение1', значение1, 'значение2', значение2 и n = 2
Ошибка при передаче переменной n и k в метод стека.
result = df_inp.selectExpr('dim1', 'dim2', 'byvar', "stack(n, eval(k)) as (names, values)")
Не могли бы вы дать мне знать, как передать переменные в вышеуказанную команду для работы?