Maison > développement back-end > Tutoriel Python > Comment désimbriquer une colonne Pandas DataFrame (ou plusieurs colonnes) dans plusieurs lignes ?

Comment désimbriquer une colonne Pandas DataFrame (ou plusieurs colonnes) dans plusieurs lignes ?

DDD
Libérer: 2024-12-29 00:39:11
original
309 Les gens l'ont consulté

How to Unnest a Pandas DataFrame Column (or Multiple Columns) into Multiple Rows?

Comment dissocier une colonne d'un DataFrame Pandas en plusieurs lignes

L'un des défis de la manipulation de données avec Pandas consiste à gérer les colonnes contenant listes. Lorsque ces colonnes de type liste doivent être divisées en lignes distinctes, le processus est appelé « destination » ou « explosion ».

Méthodes de dissociation Pandas

Méthode 1 : pandas.DataFrame.explode

Pour un DataFrame avec une seule colonne à être désimbriqué, la fonction pandas.DataFrame.explode peut être utilisée. Il prend le nom de la colonne comme argument.

df.explode('B')  # dataframe with column 'B' containing lists
Copier après la connexion

Méthode 2 : Utilisation du constructeur Repeat et DataFrame

Cette méthode combine la répétition et le constructeur DataFrame. Il répète les valeurs de la colonne en fonction de la longueur des listes, puis les concatène.

df = pd.DataFrame({'A': df.A.repeat(df.B.str.len()), 'B': np.concatenate(df.B.values)})
Copier après la connexion

Méthode 3 : recréer la liste

Recréer la list implique de convertir l'ancienne colonne en une liste de tuples contenant la valeur de la colonne et chaque élément de la list.

pd.DataFrame([[x] + [z] for x, y in df.values for z in y], columns=df.columns)
Copier après la connexion

Méthode 4 : Utiliser Reindex

Reindex crée un nouveau DataFrame avec des indices répétés pour les éléments de la liste. Les éléments concaténés sont ensuite attribués à la colonne.

df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
Copier après la connexion

Généralisation à plusieurs colonnes

Pour dissocier plusieurs colonnes, une fonction personnalisée peut être définie. Il faut le DataFrame et une liste de noms de colonnes pour exploser.

def unnesting(df, explode):
    idx = df.index.repeat(df[explode[0]].str.len())
    df1 = pd.concat([
        pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
    df1.index = idx
    return df1.join(df.drop(explode, 1), how='left')
Copier après la connexion

Décoration horizontale

Pour dissocier horizontalement, la méthode add_prefix peut être utilisée pour créer une série de nouvelles colonnes.

df.join(pd.DataFrame(df.B.tolist(), index=df.index).add_prefix('B_'))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal