Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk menyahsarang Lajur DataFrame Pandas menjadi Berbilang Baris?

Bagaimana untuk menyahsarang Lajur DataFrame Pandas menjadi Berbilang Baris?

Susan Sarandon
Lepaskan: 2024-12-21 00:47:09
asal
553 orang telah melayarinya

How to Unnest a Pandas DataFrame Column into Multiple Rows?

Cara Menyahsarang Lajur menjadi Berbilang Baris dalam Bingkai Data Pandas

Masalah:

Anda mempunyai DataFrame di mana satu lajur mengandungi senarai nilai dan anda ingin memisahkan setiap elemen senarai ke dalamnya baris sendiri.

Penyelesaian:

Terdapat beberapa kaedah untuk menyahsarang (atau meletupkan) lajur dalam Pandas DataFrame:

Kaedah 1: Menggunakan letupan (Panda >= 0.25)

Jika anda mempunyai satu lajur untuk dinyahsarang, fungsi letupan ialah penyelesaian paling mudah:

df.explode('B')
Salin selepas log masuk

Kaedah 2: Menggunakan apply dan pd.Series

Kaedah ini mudah tetapi tidak disyorkan untuk prestasi sebab:

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

Kaedah 3: Menggunakan pengulangan dan Pembina DataFrame

Buat DataFrame baharu dengan nilai berulang dalam lajur tidak bersarang:

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

Kaedah 4: Menggunakan indeks semula atau loc

Buat DataFrame baharu dengan nilai yang tidak bersarang dan gunakan indeks semula atau loc untuk menyelaraskannya dengan asal:

df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
Salin selepas log masuk

Kaedah 5: Menggunakan koleksi.ChainMap ( apabila senarai mengandungi unik nilai)

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

Kaedah 6: Menggunakan Numpy untuk Prestasi Tinggi

Kaedah ini lebih cekap daripada yang sebelumnya:

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)
Salin selepas log masuk

Kaedah 7: Menggunakan itertools.cycle dan itertools.chain

Penyelesaian Python tulen untuk keseronokan:

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)
Salin selepas log masuk

Mengerti kepada Berbilang Lajur:

Fungsi berikut membolehkan anda untuk unnest berbilang lajur dalam a DataFrame:

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')
Salin selepas log masuk

Column-wise Unnesting:

Jika anda perlu membuka sarang lajur secara mendatar, gunakan kaedah add_prefix bagi pembina DataFrame:

df.join(pd.DataFrame(df.B.tolist(),index=df.index).add_prefix('B_'))
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menyahsarang Lajur DataFrame Pandas menjadi Berbilang Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan