Транспонирование данных в таблице Python
Необходимо транспонировать столбцы в таблице. Важно, что значения названия столбцов (A,B) - это строковые переменные должны стать названиями полученных вертикальных столбцов, а порядковые номера X(1)... порядковым номером строк полученной таблицы.
Исходный DataFrame:
Name/X X1 X2 X3 X4
A 10 12 33 31
B 22 14 44 17
Выход должен быть таким:
N A B
1 10 22
2 12 14
3 33 44
4 31 17
Ответы (2 шт):
d1 = {'col1': [1, 2], 'col2': [3, 4]}
df1 = pd.DataFrame(data=d1)
col1 col2
0 1 3
1 2 4
df1_transposed = df1.T # or df1.transpose()
df1_transposed
0 1
col1 1 2
col2 3 4
Here more detail about transpose https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.transpose.html
Сначала нужно сделать UNPIVOT по столбцам "X*", превратив таблицу из широкой в высокую, а после этого сделать PIVOT, используя наименования "X*" столбцов в качестве индекса, а значения из столбца "Name/X" в качестве наименований будущих столбцов:
res = (df
.set_index("Name/X")
.stack()
.reset_index()
.pivot_table(index="level_1", columns="Name/X", values=0)
.reset_index(drop=True)
результат:
In [243]: res
Out[243]:
Name/X A B
0 10 22
1 12 14
2 33 44
3 31 17
А как сделать в конечной таблице в столбце Name/X сделать не значения индекса строк, а порядковый номер строки, который соответствует номеру столбца в исходной таблице?
res = (df
.set_index("Name/X")
.stack()
.reset_index()
.pivot_table(index="level_1", columns="Name/X", values=0)
.rename_axis(None))
res.index = res.index.str.replace(r"^\D+", "", regex=True)
результат:
In [254]: res
Out[254]:
Name/X A B
1 10 22
2 12 14
3 33 44
4 31 17