2 votes

Fusionner plusieurs colonnes CSV en une tout en répétant l'en-tête

Je suis en train de fusionner plusieurs colonnes dans un fichier CSV en une seule colonne en répétant l'en-tête de chaque colonne d'origine comme indiqué ci-dessous.

utilisateurA   utilisateurB
A1  B1
A2  B2
A2  B3
A2  B4

En cela:

utilisateurA   A1
utilisateurA   A2
utilisateurA   A3
utilisateurA   A4
utilisateurB   B1
utilisateurB   B2
utilisateurB   B3
utilisateurB   B4

Est-ce que quelqu'un a des suggestions sur la façon de procéder. J'ai de l'expérience en pandas mais je suis actuellement perdu.

MISE À JOUR: J'ai trouvé comment fusionner les colonnes

df = pd.read_csv(filename, sep='\t')
df = df.combine_first(pd.Series(df.values.ravel('F')).to_frame('fusionnée'))

MISE À JOUR FINALE: Résolu en utilisant melt()

df = pd.melt(df)

2voto

piRSquared Points 159

Construire avec ravel et répéter

pd.Series(df.values.ravel(), df.columns.repeat(len(df)))

userA    A1
userA    B1
userA    A2
userA    B2
userB    A2
userB    B3
userB    A2
userB    B4
dtype: object

2voto

W-B Points 94428

Vous pouvez utiliser melt

df.melt()
Out[702]: 
  variable value
0    userA    A1
1    userA    A2
2    userA    A2
3    userA    A2
4    userB    B1
5    userB    B2
6    userB    B3
7    userB    B4

1voto

testac1234 Points 33

Résolu d'abord en utilisant :

Avec un dataframe contenant seulement ces deux colonnes, vous pourriez faire df.stack().reset_index(level=1) - cmaher

Suivi d'un simple tri pour ordonner correctement :

df.sort_values(by=[0])

Voir pd.melt(df) ci-dessus pour une meilleure réponse.

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