Heim >Backend-Entwicklung >Python-Tutorial >Wie zerlege ich eine Pandas-DataFrame-Spalte in mehrere Zeilen?

Wie zerlege ich eine Pandas-DataFrame-Spalte in mehrere Zeilen?

Susan Sarandon
Susan SarandonOriginal
2024-12-25 09:46:16592Durchsuche

How to Explode a Pandas DataFrame Column into Multiple Rows?

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

In Pandas umfasst das Auflösen einer Spalte die Umwandlung von Daten aus einer einzelnen Zeile in mehrere Zeilen . Dies ist nützlich, wenn Sie eine Spalte mit Listenzellen haben und diese in einzelne Zeilen aufteilen müssen.

Stellen Sie sich einen DataFrame mit einer Spalte „B“ vor, die Listen enthält:

df = pd.DataFrame({'A': [1, 2], 'B': [[1, 2], [1, 2]]})

Output:

   A       B
0  1  [1, 2]
1  2  [1, 2]

An Wenn Sie diese Spalte „B“ auflösen, stellen wir verschiedene Methoden vor:

Methode 0 [Pandas >= 0,25]
Wenn Sie ab Pandas 0,25 nur eine Spalte auflösen müssen, verwenden Sie die Funktion pandas.DataFrame.explode:

df.explode('B')

Output:

   A  B
0  1  1
1  1  2
3  2  1
4  2  2

Methode 1
pd.Series anwenden (leicht zu verstehen, aber nicht empfohlen für Leistung):

df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})

Methode 2
Wiederholung mit DataFrame-Konstruktor verwenden:

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

Methode 3
Re -Erstellen Sie die Liste:

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

Methode 4
Reindex oder Loc verwenden:

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

Methode 5
Wenn die Liste nur eindeutige Werte enthält:

from collections import ChainMap
d = dict(ChainMap(*map(dict.fromkeys, df['B'], df['A'])))
pd.DataFrame(list(d.items()), columns=df.columns[::-1])

Methode 6
NumPy für hohe Werte verwenden Leistung:

newvalues = np.dstack((np.repeat(df.A.values, list(map(len, df.B.values))), np.concatenate(df.B.values)))
pd.DataFrame(data=newvalues[0], columns=df.columns)

Methode 7
Verwendung von Itertools-Zyklus und -Kette:

from itertools import cycle, chain
l = df.values.tolist()
l1 = [list(zip([x[0]], cycle(x[1])) if len([x[0]]) > len(x[1]) else list(zip(cycle([x[0]]), x[1]))) for x in l]
pd.DataFrame(list(chain.from_iterable(l1)), columns=df.columns)

Verallgemeinerung auf mehrere Spalten
Um mehrere explodierende Spalten zu verarbeiten, kann eine Funktion verwendet werden definiert:

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

unnesting(df, ['B', 'C'])

Spaltenweises Aufheben der Verschachtelung
Um eine Liste horizontal zu erweitern, verwenden Sie den pd.DataFrame-Konstruktor:

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

Das obige ist der detaillierte Inhalt vonWie zerlege ich eine Pandas-DataFrame-Spalte 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