Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Pivot Pandas DataFrame: Panduan Komprehensif untuk Membentuk Semula Data?

Bagaimana untuk Pivot Pandas DataFrame: Panduan Komprehensif untuk Membentuk Semula Data?

DDD
Lepaskan: 2024-12-25 10:25:09
asal
295 orang telah melayarinya

How to Pivot a Pandas DataFrame: A Comprehensive Guide to Reshaping Data?

Bagaimanakah saya boleh menukar bingkai data?

Apakah itu pangsi?

  • Membentuk semula DataFrame daripada panjang ke lebar format
  • Membolehkan untuk mencipta DataFrame baharu di mana nilai diagregatkan berdasarkan satu atau lebih lajur

Bagaimanakah saya boleh pivot?

  • Beberapa kaedah untuk memutar a DataFrame:

    • pd.DataFrame.pivot_table
    • pd.DataFrame.groupby pd.DataFrame.unstack
    • pd.DataFrame.set_index pd.DataFrame.unstack
    • pd.DataFrame.pivot (kurang fleksibel)
    • pd.crosstab (untuk penjadualan silang)
    • pd.factorize np.bincount (lanjutan, tinggi prestasi)
    • pd.get_dummies pd.DataFrame.dot (penjadualan silang)

Format panjang ke format lebar?

  • Format panjang:

    • Setiap pemerhatian menduduki satu baris
    • Berbilang lajur mewakili berbeza atribut/ukuran
  • Format luas:

    • Setiap pemerhatian menduduki satu lajur
    • Berbilang baris yang mewakili berbeza atribut/ukuran

Contoh

Soalan 1: Mengapa saya mendapat ValueError: Indeks mengandungi entri pendua, tidak boleh membentuk semula?

  • Ini berlaku apabila cuba untuk memutarkan DataFrame dengan kunci pendua di mana ia sedang berada dipangsi
  • Contoh: Jika df mempunyai entri pendua untuk baris dan kol dan anda pangsi dengan df.pivot(index='row', columns='col'), anda akan mendapat ralat.

Soalan 2: Bagaimanakah cara saya memutar df supaya nilai kol ialah lajur, nilai baris ialah indeks dan min bagi val0 adakah nilainya?

  • Gunakan pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')
    Salin selepas log masuk
    Salin selepas log masuk

Soalan 3: Bagaimana cara saya membuatnya supaya hilang nilai ialah 0?

  • Gunakan argumen isi_nilai dalam pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')
    Salin selepas log masuk
    Salin selepas log masuk

Soalan 4: Bolehkah saya mendapatkan sesuatu selain daripada min, seperti mungkin jumlah?

  • Gunakan hujah aggfunc yang berbeza dalam pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')
    Salin selepas log masuk
    Salin selepas log masuk

Soalan 5: Bolehkah saya melakukan lebih daripada satu pengagregatan pada satu masa?

  • Sediakan senarai daripada boleh panggil kepada hujah aggfunc dalam pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc=[np.size, np.mean])
    Salin selepas log masuk

Soalan 6: Bolehkah saya mengagregatkan pada berbilang lajur nilai?

  • Lepaskan berbilang nama lajur sebagai senarai kepada nilai dalam pd.DataFrame.pivot_table:

    df.pivot_table(values=['val0', 'val1'], index='row', columns='col', fill_value=0, aggfunc='mean')
    Salin selepas log masuk

Soalan 7: Bolehkah saya membahagikan dengan berbilang lajur?

  • Luluskan berbilang nama lajur sebagai senarai untuk mengindeks atau lajur dalam pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index=['row', 'item'], columns='col', fill_value=0, aggfunc='mean')
    Salin selepas log masuk

Soalan 8: Atau

  • Boleh membahagikan dengan berbilang lajur dalam indeks dan lajur menggunakan pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index=['key', 'row'], columns=['item', 'col'], fill_value=0, aggfunc='mean')
    Salin selepas log masuk

Soalan 9: Bolehkah saya mengagregatkan kekerapan lajur dan baris berlaku bersama, aka "penjadualan silang"?

  • Gunakan pd.crosstab:

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')
    Salin selepas log masuk
    Salin selepas log masuk

Soalan 10: Bagaimanakah cara menukar DataFrame dari panjang kepada lebar dengan memutar pada dua lajur SAHAJA?

df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')
Salin selepas log masuk
Salin selepas log masuk

Soalan 11: Bagaimanakah cara meratakan gandaan indeks kepada indeks tunggal selepas pivot?

  • Sertai indeks berbilang bahagian sebagai rentetan tunggal:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')
    Salin selepas log masuk
    Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Pivot Pandas DataFrame: Panduan Komprehensif untuk Membentuk Semula Data?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan