Cette tâche implique la création d'un compteur séquentiel qui réinitialise chaque fois que la valeur dans une colonne spécifique change. La façon la plus efficace d'y parvenir dans Python exploite la puissance de la bibliothèque pandas
. Pandas fournit des opérations vectorielles qui sont considérablement plus rapides que d'itérer à travers les lignes.
Voici comment vous pouvez le faire:
import pandas as pd # Sample data data = {'col1': ['A', 'A', 'B', 'B', 'B', 'C', 'A', 'A', 'D']} df = pd.DataFrame(data) # Efficiently assign sequential numbers df['col2'] = (df['col1'] != df['col1'].shift()).cumsum() print(df)
Ce code utilise d'abord df['col1'].shift()
pour créer une version décalée de la colonne 'Col1'. La comparaison de cette version décalée avec la colonne d'origine (df['col1'] != df['col1'].shift()
) identifie où les valeurs changent. La méthode .cumsum()
résume alors cumulativement les résultats booléens, créant efficacement un compteur séquentiel qui n'incrémente que lorsqu'une nouvelle valeur est rencontrée. Cela attribue un numéro consécutif unique à chaque groupe de valeurs identiques dans «COL1», stockant le résultat dans une nouvelle colonne nommée «Col2».
Les ID de méthode la plus efficace. Au lieu d'attribuer simplement des numéros consécutifs, nous pouvons créer des ID qui reflètent explicitement le regroupement. Ceci est réalisé en combinant l'identifiant de groupe avec un compteur séquentiel dans chaque groupe.
import pandas as pd data = {'col1': ['A', 'A', 'B', 'B', 'B', 'C', 'A', 'A', 'D']} df = pd.DataFrame(data) df['group_id'] = (df['col1'] != df['col1'].shift()).cumsum() df['sequential_id'] = df.groupby('group_id').cumcount() + 1 df['final_id'] = df['col1'] + '_' + df['sequential_id'].astype(str) print(df)
Ce code amélioré identifie d'abord les groupes en utilisant la même méthode qu'auparavant. Ensuite, df.groupby('group_id').cumcount()
génère un compteur séquentiel dans chaque groupe. Nous ajoutons 1 pour démarrer le nombre de 1 au lieu de 0. Enfin, nous concatenons la valeur d'origine de «Col1» avec l'ID séquentiel pour créer un identifiant unique plus informatif dans «final_id». Cette méthode gère efficacement de grands ensembles de données en raison des opérations vectorisées de Pandas.
Oui, Python, spécifiquement avec la bibliothèque Pandas, excellent à cette tâche. Les exemples précédents démontrent cette capacité. La méthode groupby()
, combinée avec .cumcount()
, fournit un moyen puissant et efficace d'ajouter la numérotation séquentielle dans des groupes définis par des valeurs identiques dans une colonne. L'efficacité découle de la capacité de Pandas à effectuer ces opérations sur l'ensemble des données de données à la fois, en évitant l'itération lente de la ligne par rangée.
Optimisation du code pour générer des ids séquentiels se concentre principalement sur les pandas de levier. Les exemples précédents présentent déjà cette optimisation. Pour améliorer encore les performances des ensembles de données extrêmement grands:
inplace=True
) peuvent parfois améliorer les performances. Cependant, souvent les gains de performance sont négligeables par rapport au coût de lisibilité. Les solutions fournies ci-dessus à l'aide de pandas sont généralement hautement optimisées pour la plupart des scénarios du monde réel impliquant une génération d'ID séquentielle basée sur le regroupement. Se concentrer sur des techniques de pandas efficaces est l'approche la plus efficace pour l'optimisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!