Heim >Backend-Entwicklung >Python-Tutorial >Wie entschachtele ich eine Pandas-DataFrame-Spalte (oder mehrere Spalten) in mehrere Zeilen?

Wie entschachtele ich eine Pandas-DataFrame-Spalte (oder mehrere Spalten) in mehrere Zeilen?

DDD
DDDOriginal
2024-12-29 00:39:11303Durchsuche

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

So entschachteln Sie eine Spalte in einem Pandas-DataFrame in mehrere Zeilen

Eine der Herausforderungen bei der Datenmanipulation mit Pandas ist der Umgang mit Spalten, die Folgendes enthalten Listen. Wenn diese Listenspalten in separate Zeilen aufgeteilt werden müssen, wird der Vorgang als „Aufheben der Verschachtelung“ oder „Auflösen“ bezeichnet.

Pandas-Aufhebungsmethoden

Methode 1: pandas.DataFrame.explode

Für einen DataFrame mit einer einzelnen Spalte Nicht verschachtelt kann die Funktion pandas.DataFrame.explode verwendet werden. Der Spaltenname wird als Argument verwendet.

df.explode('B')  # dataframe with column 'B' containing lists

Methode 2: Verwendung von Repeat und DataFrame-Konstruktor

Diese Methode kombiniert Repeat und den DataFrame-Konstruktor. Es wiederholt die Werte in der Spalte basierend auf der Länge der Listen und verkettet sie dann.

df = pd.DataFrame({'A': df.A.repeat(df.B.str.len()), 'B': np.concatenate(df.B.values)})

Methode 3: Liste neu erstellen

Neu erstellen list beinhaltet das Konvertieren der alten Spalte in eine Liste von Tupeln, die den Wert der Spalte und jedes Element der enthält Liste.

pd.DataFrame([[x] + [z] for x, y in df.values for z in y], columns=df.columns)

Methode 4: Reindex verwenden

Reindex erstellt einen neuen DataFrame mit wiederholten Indizes für die Elemente in der Liste. Der Spalte werden dann die verketteten Elemente zugewiesen.

df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))

Verallgemeinerung auf mehrere Spalten

Um die Verschachtelung mehrerer Spalten aufzuheben, kann eine benutzerdefinierte Funktion definiert werden. Zum Explodieren sind der DataFrame und eine Liste von Spaltennamen erforderlich.

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

Horizontales Aufheben der Verschachtelung

Um die Verschachtelung horizontal aufzuheben, kann die Methode add_prefix verwendet werden, um eine Reihe zu erstellen neuer Spalten.

df.join(pd.DataFrame(df.B.tolist(), index=df.index).add_prefix('B_'))

Das obige ist der detaillierte Inhalt vonWie entschachtele ich eine Pandas-DataFrame-Spalte (oder mehrere Spalten) in mehrere Zeilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn