Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menyahsarang Lajur DataFrame Pandas (atau Berbilang Lajur) ke dalam Berbilang Baris?

Bagaimana untuk Menyahsarang Lajur DataFrame Pandas (atau Berbilang Lajur) ke dalam Berbilang Baris?

DDD
DDDasal
2024-12-29 00:39:11286semak imbas

How to Unnest a Pandas DataFrame Column (or Multiple Columns) into Multiple Rows?

Cara Menyahsarang Lajur dalam Bingkai Data Pandas menjadi Berbilang Baris

Salah satu cabaran dalam manipulasi data dengan Panda ialah menangani lajur yang mengandungi senarai. Apabila lajur jenis senarai ini perlu dibahagikan kepada baris yang berasingan, proses itu dikenali sebagai "tidak bersarang" atau "meletup."

Kaedah Pandas Unnesting

Kaedah 1: panda.DataFrame.meletup

Untuk DataFrame dengan satu lajur tidak bersarang, fungsi panda.DataFrame.explode boleh digunakan. Ia mengambil nama lajur sebagai hujah.

df.explode('B')  # dataframe with column 'B' containing lists

Kaedah 2: Menggunakan Pembina Ulang dan DataFrame

Kaedah ini menggabungkan ulangan dan pembina DataFrame. Ia mengulangi nilai dalam lajur berdasarkan panjang senarai dan kemudian menggabungkannya.

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

Kaedah 3: Buat Semula Senarai

Mencipta semula senarai melibatkan penukaran lajur lama kepada senarai tupel yang mengandungi nilai lajur dan setiap elemen list.

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

Kaedah 4: Menggunakan Reindex

Reindex mencipta DataFrame baharu dengan indeks berulang untuk elemen dalam senarai. Lajur itu kemudiannya diberikan elemen bercantum.

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

Mengerti kepada Berbilang Lajur

Untuk menyahsarang berbilang lajur, fungsi tersuai boleh ditakrifkan. Ia memerlukan DataFrame dan senarai nama lajur untuk meletup.

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

Mendatar Tidak Bersarang

Untuk membuka sarang secara mendatar, kaedah add_prefix boleh digunakan untuk mencipta siri lajur baharu.

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

Atas ialah kandungan terperinci Bagaimana untuk Menyahsarang Lajur DataFrame Pandas (atau Berbilang Lajur) ke dalam Berbilang Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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