как из датафрейма размером 5*5 сделать датафрейм с одним столбцом

Рейтинг: 0Ответов: 2Опубликовано: 04.05.2023

Есть датафрейм размером 3х5

1 2 3
095 093 094
109 NaN NaN
09 10 NaN
019 020 NaN
04 05 123

Возможно ли из датафрейма 3Х5 сделать датафрейм 1Х11 без пустых значений

1
095
109
09
019
04
093
10
020
05
094
123

Ответы

▲ 3Принят

Примерно так:

df1 = df.T.stack(dropna=True).to_frame().reset_index(drop=True)

Подсмотрено на английском СО.

По шагам:

  • T нужно, чтобы данные шли в нужном порядке
  • stack(dropna=True) делает из матричного датафрейма линейную серию, попутно выкидывая NA
  • to_frame() превращает серию обратно в датафрейм с одной колонкой (вроде бы на выходе нужен именно датафрейм)
  • .reset_index(drop=True) выкидывает сложный мультииндекс, образовавшийся на первом шаге

То есть в принципе достаточно уже первых двух шагов, остальное делается чтобы привести результат в нужный/красивый вид.

▲ 5

можно воспользоваться методом melt:

res = df.melt()["value"].dropna()

res:

0      95.0
1     109.0
2       9.0
3      19.0
4       4.0
5      93.0
7      10.0
8      20.0
9       5.0
10     94.0
14    123.0