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
DDDasal
2024-12-25 10:25:09155semak imbas

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

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

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

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

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

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

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

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

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

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

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