2 votes

Pandas ajout de colonnes en bas de la colonne

J'ai un df = pd.DataFrame([[1, 3, 5], [2, 4, 6]]) qui ressemble à

    0   1   2
0   1   3   5
1   2   4   6

J'essaie de déplacer chacune des colonnes en bas de la première colonne. Ça devrait ressembler à quelque chose comme...

    0
0   1
1   2
2   3
3   4
4   5
5   6

Je cherche un moyen de le faire avec n lignes sur un dataframe beaucoup plus large. Je cherchais d'autres moyens avec pandas stack() mais je n'ai pas trouvé de solution.

3voto

Dani Mesejo Points 29634

Vous pouvez transposer et empiler :

import pandas as pd

df = pd.DataFrame([[1, 3, 5], [2, 4, 6]])
res = df.T.stack()
print(res)

Sortie

0  0    1
   1    2
1  0    3
   1    4
2  0    5
   1    6
dtype: int64

Si vous souhaitez supprimer l'index, utilisez reset_index (comme suggéré par @JoeFerndz) :

res = df.T.stack().reset_index(drop=True)
print(res)

Sortie

0    1
1    2
2    3
3    4
4    5
5    6
dtype: int64

En alternative, il suffit de aplatir le tableau numpy directement :

res = pd.DataFrame(df.values.flatten('F'))
print(res)

Sortie

   0
0  1
1  2
2  3
3  4
4  5
5  6

Le F signifie :

d'aplatir dans l'ordre de colonne majeure (style Fortran).

2voto

abarri Points 23

Cela peut être fait en utilisant la méthode reshape de Numpy. Le code ci-dessous convertit d'abord le DataFrame en un tableau Numpy, puis le remodèle en un tableau de colonne en parcourant les éléments dans un ordre d'index de type Fortran. Le résultat est finalement converti en DataFrame Pandas.

pd.DataFrame(df.values.reshape((-1, 1), order="F"))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X