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')
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'})
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)})
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))
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])
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)
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)
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')
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_'))
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!