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

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

Susan Sarandon
Freigeben: 2024-12-21 00:47:09
Original
527 Leute haben es durchsucht

How to Unnest a Pandas DataFrame Column into Multiple Rows?

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

Problem:

Sie haben einen DataFrame, in dem eine Spalte eine Werteliste enthält, und Sie möchten jedes Listenelement in ein eigenes Element aufteilen Zeile.

Lösung:

Es gibt mehrere Methoden, um eine Spalte in einem Pandas DataFrame zu entschachteln (oder aufzulösen):

Methode 1 : Mit Explodieren (Pandas >= 0,25)

Wenn Sie eine einzelne Spalte haben Zum Aufheben der Verschachtelung ist die Explosionsfunktion die einfachste Lösung:

df.explode('B')
Nach dem Login kopieren

Methode 2: Apply und pd.Series verwenden

Diese Methode ist einfach, wird aber aus Leistungsgründen nicht empfohlen Gründe:

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

Methode 3: Verwendung von Wiederholung und DataFrame Konstruktor

Erstellen Sie einen neuen DataFrame mit den wiederholten Werten in der nicht verschachtelten Spalte:

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

Methode 4: Reindex oder Loc verwenden

Erstellen Sie einen neuen DataFrame mit den nicht verschachtelten Werten und richten Sie ihn mithilfe von „reindex“ oder „loc“ an den aus Original:

df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
Nach dem Login kopieren

Methode 5: Collections.ChainMap verwenden (wenn die Liste 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])
Nach dem Login kopieren

Methode 6: Numpy für High verwenden Leistung

Diese Methode ist effizienter als die vorherige ones:

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)
Nach dem Login kopieren

Methode 7: Verwendung von itertools.cycle und itertools.chain

Reine Python-Lösung zum Spaß:

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)
Nach dem Login kopieren

Verallgemeinerung auf mehrere Spalten:

Mit der folgenden Funktion können Sie Folgendes tun mehrere Spalten in einem DataFrame entschachteln:

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')
Nach dem Login kopieren

Spaltenweises Entschachteln:

Wenn Sie eine Spalte horizontal entschachteln müssen, verwenden Sie die Methode add_prefix des DataFrame-Konstruktors :

df.join(pd.DataFrame(df.B.tolist(),index=df.index).add_prefix('B_'))
Nach dem Login kopieren

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage