0
votes

Regroupement par des colonnes en double pour les fusionner dans une colonne avec le même nom

J'essaie de combiner des colonnes en double dans mon Dataframe. Mon fichier de données est multiindexé et ressemble à xxx

Je pense que le Dataframe ressemble à xxx

J'essaie d'y parvenir par xxx

mais je reçois l'erreur xxx

d'autres messages concernant cette erreur montrent que l'utilisateur n'avait pas la colonne ils essayaient de grouper par. Est-ce que mon erreur est le résultat des noms rectoppins en double et si oui, comment puis-je le réparer?


5 commentaires

Qu'est-ce qui vous empêche de simplement supprimer la colonne? Je suppose que la colonne ne serait pas nécessairement tout nan . Y aurait-il des données contradictoires? Tels que m dans une colonne et f dans l'autre? Ou différents âges? Comment cela devrait-il être résolu? Ou est-ce toujours une valeur et un nan ?


@busybear c'est un bon point et cette hypothèse est correcte. Il y a toujours une valeur et un nan . Je vais modifier ma question pour refléter cela, merci de pointer cela!


Salut nébula, impression (df.columns) est de classe "". Donc, si vous utilisez df.groupby (df.columns), il lancera une erreur lorsque vous avez souligné ci-dessus. Vous devez utiliser df.groupby (liste (df.columns)) inonder au travail.


Salut @bhanuteez, mais je ne regroupe pas les noms complets des colonnes, je regroupe par df.columns.map (...) , qui est comme groupement par [ «sexe», «sexe», «âge», «âge»] .


@ HS-Nébula Je parle, la raison de "ValueError". Mais de toute façon, votre code a également un problème de nom de colonne.


3 Réponses :


1
votes

une solution alternative: xxx


2 commentaires

Merci, cette méthode fonctionne, mais cela n'explique pas pourquoi le groupby n'abandonnait pas la même chose sans avoir à créer des colonnes supplémentaires.


En tant que bonus, je pourrais le faire dans une ligne comme df.bill (axis = 1) .ffill (Axis = 1) .iloc [:, :: 2] puis renommez les colonnes.



1
votes

Nous pouvons convertir les noms de colonne d'abord: xxx

puis groupe par noms de colonne et mode d'utilisation: xxx

update : l'original one-liner fonctionne également avec Axis = 1 ajouté à la liste des paramètres de groupeby (puisque nous regroupons par colonnes au lieu de lignes): xxx


2 commentaires

Donc, tout ce que je devais faire était d'ajouter le niveau = 0 à mon groupby ? Pouvez-vous expliquer pourquoi?


Le problème semble être avec votre déclaration manquant Axis = 1 (puisque nous devons regrouper des colonnes au lieu de lignes) en tant que paramètre de groupeby. Les œuvres suivantes bien: df.groupby (df.columns.map (lambda x: x.split ('_ copy') [0], 1), axis = 1) .Apply (Lambda x: x.mode ( 1) [0])



1
votes

Vous manquez Axis = 1 dans le groupeby: xxx pré>

solution alternative (sans groupe, mais similaire avec pile et instable): p>

df.rename(columns=lambda x: x.split('_COPY')[0]).stack().unstack()


1 commentaires

Merci, j'ai réalisé que j'avais une faute de frappe dans ma ligne de groupeby, donc il ne devrait donc pas y avoir de 1 dans ma carte carte code. En outre, bonne solution alternative.