0
votes

Ajouter une répétition d'index à un Dataframe Pandas

J'ai un Dataframe comme celui-ci: xxx

Je veux ajouter une colonne d'entier séquentielle unique à nom , comme ceci: < PRE> XXX

Y a-t-il une élégante pandas one- (ou deux) doublure pour faire cela? Je suis nouveau à Pandas et suspect Il y a un moyen de le faire en combinant une combinaison de Groupby et de Lambda, mais je ne fais pas de progrès.


3 commentaires

df ["nom"]. Astype ("catégorie"). Cat.codes


Unique à chaque nom, ou unique à chaque regroupement consécutif de noms (que les réponses postées semblent accomplir). Avec un fichier de données trié, ceux-ci peuvent être identiques, mais en général ne le sont pas.


df.groupby ('Nom', Trier = FALSE) .ngroup () + 1 est probablement ce que vous voulez. C'est unique par nom et le comptoir est basé sur l'occurrence dans le Dataframe, pas de tri lexicographique.


3 Réponses :


1
votes

Vous pouvez laisser xxx


3 commentaires

Et si les valeurs nom ne sont pas triées?


L'exemple fourni suggérerait qu'ils sont. @Superduper?


Oui, dans mon cas, ils sont triés, donc cette réponse fonctionne, mais pour l'utilisation générale, la factorisation semble meilleure. Et juste une note pour les futurs visiteurs: cette solution et la solution acceptée fonctionnent, mais dans mon cas, a abouti à un configuration de transfects (noyau Python 3.7 à Jupterylab 0,35,3)



0
votes

Essayez ceci:

df.set_index((~df.name.duplicated()).cumsum())
      name      food
name                
1     mike   pizza  
1     mike  cookie  
1     mike  banana  
2     mary   apple  
2     mary    pear  
3     jane  broccoli


0 commentaires

1
votes

Vous pouvez utiliser PD.Factorize : xxx

sortie: xxx

puisse_index ID: < / p> xxx

sortie: xxx


1 commentaires

Toutes les autres réponses sont super, et franchement, je n'avais pas compris à quel point je savais que peu je savais - les solutions de chacun entraînent des indices appropriés de Dataframe - que je ne savais pas était une chose; Je voulais juste que la colonne de valeurs, que les solutions de cette et de Fuglede accomplissent dans une ligne. Celui-ci semble être un sort insensible, qui est un bonus.