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
DDDoriginal
2024-12-29 00:39:11303parcourir

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

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)})

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)

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))

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')

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_'))

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!

Déclaration:
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