pandas преобразование формы таблицы

Есть датафрейм:

data = pd.DataFrame({
           'a': [3, 1, 2],
           'b': [5, 3, 4],
           'c': [7, 6, 5]})

Как преобразовать его в дф из двух колонок: в одной - названия колонок из data, в другой - их значения? Общий вид такой:

col1 col2
a    3
a    1
a    2
b    5
b    3
..   ..

В голову приходит только создать новый дф, забрать заголовки исходного с помощью data.columns и дальше заполнять циклами по соответствию, но наверняка как-то проще можно.


Ответы (2 шт):

Автор решения: passant

На ум приходит известное: "Месье знает толк в извращениях" :-) Если так не хочется выписывать циклы, то можно например вот так:

res=pd.DataFrame({'col1':np.repeat(data.columns,len(data)),
                  'col2':data.to_numpy().transpose().flatten()})
print(res)

Получаем:

  col1  col2
0    a     3
1    a     1
2    a     2
3    b     5
4    b     3
5    b     4
6    c     7
7    c     6
8    c     5

Вот только я абсолютно не уверен, что так будет эффективнее, чем через явный цикл. Если хотите - попробуйте проверить. Мне лично лень.

→ Ссылка
Автор решения: SergFSM

для этого у pandas есть специальный метод:

data.melt()

>>> out
'''
  variable  value
0        a      3
1        a      1
2        a      2
3        b      5
4        b      3
5        b      4
6        c      7
7        c      6
8        c      5
→ Ссылка