как из датафрейма размером 5*5 сделать датафрейм с одним столбцом
Есть датафрейм размером 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 |
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Примерно так:
df1 = df.T.stack(dropna=True).to_frame().reset_index(drop=True)
Подсмотрено на английском СО.
По шагам:
Tнужно, чтобы данные шли в нужном порядкеstack(dropna=True)делает из матричного датафрейма линейную серию, попутно выкидываяNAto_frame()превращает серию обратно в датафрейм с одной колонкой (вроде бы на выходе нужен именно датафрейм).reset_index(drop=True)выкидывает сложный мультииндекс, образовавшийся на первом шаге
То есть в принципе достаточно уже первых двух шагов, остальное делается чтобы привести результат в нужный/красивый вид.
Автор решения: strawdog
→ Ссылка
можно воспользоваться методом 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