Beim Umgang mit DataFrames, die Listenspalten enthalten, kann es nützlich sein, diese Listen in separate Zeilen zu „entfalten“.
Für eine einspaltige Explosion verwenden Sie explosion() direkt:
df = pd.DataFrame({'A': [1, 2], 'B': [[1, 2], [1, 2]]}) df_exploded = df.explode('B')
df_exploded = df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
df_exploded = pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)})
df_exploded = df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
from collections import ChainMap d = dict(ChainMap(*map(dict.fromkeys, df['B'], df['A']))) df_exploded = pd.DataFrame(list(d.items()),columns=df.columns[::-1])
newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values))) df_exploded = pd.DataFrame(data=newvalues[0],columns=df.columns)
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] df_exploded = pd.DataFrame(list(chain.from_iterable(l1)),columns=df.columns)
Um die oben genannten Methoden zu verallgemeinern Verwenden Sie für mehrere Spalten die folgende Funktion:
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')
Um die Verschachtelung horizontal aufzuheben, ändern Sie die Funktion:
def unnesting(df, explode, axis): if axis==1: # Previous implementation else : df1 = pd.concat([ pd.DataFrame(df[x].tolist(), index=df.index).add_prefix(x) for x in explode], axis=1) return df1.join(df.drop(explode, 1), how='left')
Das obige ist der detaillierte Inhalt vonWie entschachtele ich Listenspalten in Pandas DataFrames?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!