Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Meletupkan Lajur Bingkai Data Pandas ke dalam Berbilang Baris?

Bagaimana untuk Meletupkan Lajur Bingkai Data Pandas ke dalam Berbilang Baris?

Susan Sarandon
Lepaskan: 2024-12-25 09:46:16
asal
588 orang telah melayarinya

How to Explode a Pandas DataFrame Column into Multiple Rows?

Cara Menyahsarang (Meletupkan) Lajur dalam Bingkai Data Pandas, menjadi Berbilang Baris

Dalam Panda, meletup lajur melibatkan penukaran data daripada satu baris kepada berbilang baris . Ini berguna apabila anda mempunyai lajur yang mengandungi sel jenis senarai dan perlu membahagikannya kepada baris individu.

Pertimbangkan DataFrame dengan lajur 'B' yang mengandungi senarai:

df = pd.DataFrame({'A': [1, 2], 'B': [[1, 2], [1, 2]]})

Output:

   A       B
0  1  [1, 2]
1  2  [1, 2]
Salin selepas log masuk

Untuk meletupkan lajur 'B' ini, kami mempersembahkan pelbagai kaedah:

Kaedah 0 [Panda >= 0.25]
Bermula dari Pandas 0.25, jika anda perlu meletupkan hanya satu lajur, gunakan fungsi panda.DataFrame.explode:

df.explode('B')

Output:

   A  B
0  1  1
1  1  2
3  2  1
4  2  2
Salin selepas log masuk

Kaedah 1
gunakan pd.Series (mudah difahami tetapi tidak disyorkan untuk prestasi):

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

Kaedah 2
Menggunakan ulangan dengan pembina DataFrame:

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

Kaedah 3
Semula -mencipta senarai:

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

Kaedah 4
Menggunakan indeks semula atau loc:

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

Kaedah 5
Apabila senarai mengandungi hanya nilai unik:

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:

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 kitaran dan rantai itertools:

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
Untuk mengendalikan berbilang lajur yang meletup, fungsi boleh ditakrifkan:

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

unnesting(df, ['B', 'C'])
Salin selepas log masuk

Column-Wise Unnesting
Untuk mengembangkan senarai secara mendatar, gunakan pd.DataFrame constructor:

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

Atas ialah kandungan terperinci Bagaimana untuk Meletupkan Lajur Bingkai Data Pandas ke dalam Berbilang Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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