J'ai des données dans quatre colonnes dans Excel, à transposer sur deux lignes. La première colonne à être la ligne d'en-tête pour les données dans la deuxième colonne et la troisième colonne à être l'en-tête des données dans la quatrième colonne comme ci-dessous:
Les données sont comme ci-dessous
A B C D E F G H I J K L 1 2 3 4 5 6 7 8 9 10 11 12
Et besoin de transposer
A 1 G 7 B 2 H 8 C 3 I 9 D 4 J 10 E 5 K 11 F 6 L 12
Appréciant vos précieuses contributions.
3 Réponses :
Pour une solution générale fonctionnant avec 4
, 6
, 10
colonnes, sélectionnez les paires et dissociez les colonnes en les indexant, aplatissez dans le tableau numpy et passez au constructeur DataFrame
:
a = np.arange(len(df.columns)) df.columns = [a % 2, a // 2] df = (df.stack() .sort_index(level=1) .set_index(0)[[1]] .T .rename_axis(None, axis=1) .reset_index(drop=True)) print (df) A B C D E F G H I J K L 0 1 2 3 4 5 6 7 8 9 10 11 12
Ou si vous voulez utiliser la solution pandas, créez MultiIndex
par division modulo et entière de np.arange
par longueur de colonnes, puis remodelez-vous par DataFrame.stack
, puis transposez et nettoyez les données:
c = df.iloc[:, ::2].T.to_numpy().ravel() v = df.iloc[:, 1::2].T.to_numpy().ravel() df = pd.DataFrame([v], columns=c) print (df) A B C D E F G H I J K L 0 1 2 3 4 5 6 7 8 9 10 11 12
Merci @jezrael
@ArifKassim - Il n'y a donc que 4 colonnes? Et pas besoin de solution générale? Parce qu'une seule réponse doit être acceptée, pas les deux.
Utilisez pd.concat
et transpose(.T)
:
In [2139]: d = pd.concat([df.iloc[:, :2].T.reset_index(drop=True), df.iloc[:, 2:].T.reset_index(drop=True)],1) In [2144]: d.columns = d.loc[0] In [2147]: d = d.drop(0) In [2148]: d Out[2148]: 0 A B C D E F G H I J K L 1 1 2 3 4 5 6 7 8 9 10 11 12
Merci @Mayank Porwal
@ArifKassim Heureux de vous aider. N'oubliez pas de voter également pour la réponse.
Vous pouvez utiliser np.reshape
, np.vstack
, puis set_index
et Transpose
:
>>> pd.DataFrame(np.vstack(np.split(df, 2, axis=1))).set_index(0).T 0 A B C D E F G H I J K L 1 1 2 3 4 5 6 7 8 9 10 11 12
Impressionnant. C'est merveilleux. J'ai essayé les trois solutions. Je suis novice en python et en programmation dans son ensemble. C'était ma première question ici et j'ai eu une très bonne réponse. Merci, @Sayandip Dutta
@ArifKassim vous êtes les bienvenus. Chez SO, si vous posez une question décente, vous obtiendrez presque toujours de l'aide. Si cela fonctionne, vous pouvez envisager de voter pour.