Как получить DataFrame в одну строку, из нескольких столбцов исходного DataFrame?
Есть исходный DataFrame из двух столбцов:
tf = pd.DataFrame({'A': list(range(1,13)), 'B': list(range(10,130,10))})
A B
0 1 10
1 2 20
2 3 30
3 4 40
4 5 50
5 6 60
6 7 70
7 8 80
8 9 90
9 10 100
10 11 110
11 12 120
Из него нужно получить DataFrame с одной строкой, так:
A_1 A_2 A_3 A_4 A_5 A_6 A_7 A_8 A_9 A_10 A_11 A_12 B_1 B_2 B_3 B_4 B_5 B_6 B_7 B_8 B_9 B_10 B_11 B_12
0 1 2 3 4 5 6 7 8 9 10 11 12 10 20 30 40 50 60 70 80 90 100 110 120
Ответы (2 шт):
Автор решения: mr.polden2010
→ Ссылка
Библиотека и исходная таблица
import pandas as pd
tf = pd.DataFrame({'A': list(range(1,13)), 'B': list(range(10,130,10))})
Создаём два пустых списка
tr = [] # для списка значений
tr_out_cols = [] # для названий столбцов новой таблицы
Запускаем цикл по столбцам исходной таблицы
for c in tf.columns:
tr_out_cols = tr_out_cols + list(c+'_'+str(m) for m in range(1,tf.shape[0]+1))
tr = tr + tf[c].to_list()
Создаём новый DataFrame в ltf
ltf = pd.DataFrame( [tr], columns= tr_out_cols )
Автор решения: MaxU
→ Ссылка
решение в стиле Pandas:
t = tf.stack().reset_index(name="val")
res = (t
.assign(name=t["level_1"] + "_" + t["val"].astype(str))
.sort_values(["level_1","val"])
[["name", "val"]]
.set_index("name")
.T)
результат:
In [38]: res
Out[38]:
name A_1 A_2 A_3 A_4 A_5 A_6 A_7 A_8 A_9 A_10 A_11 A_12 B_10 B_20 B_30 B_40 B_50 B_60 B_70 B_80 B_90 B_100 B_110 B_120
val 1 2 3 4 5 6 7 8 9 10 11 12 10 20 30 40 50 60 70 80 90 100 110 120