Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah saya boleh Pivot Pandas DataFrame dalam Python?

Bagaimanakah saya boleh Pivot Pandas DataFrame dalam Python?

Patricia Arquette
Lepaskan: 2024-12-26 16:33:09
asal
300 orang telah melayarinya

How Can I Pivot a Pandas DataFrame in Python?

Bagaimanakah saya boleh memaksi kerangka data?

Apakah itu pangsi?

Pengasian ialah satu teknik transformasi data yang digunakan untuk membentuk semula DataFrame dengan menukar baris dan lajur. Ia biasanya digunakan untuk menyusun data dengan cara yang memudahkan untuk menganalisis atau memvisualisasikan.

Bagaimanakah saya boleh berputar?

Terdapat beberapa cara untuk memutarkan DataFrame dalam Python menggunakan pustaka Pandas:

1. pd.DataFrame.pivot_table:

Kaedah ini ialah pilihan yang serba boleh dan kaya dengan ciri untuk memutar data. Ia membolehkan anda menentukan nilai yang hendak diagregatkan, fungsi pengagregatan dan indeks baris dan lajur.

Contoh:

import pandas as pd

# Create a sample DataFrame
df = pd.DataFrame({
    "row": ["row0", "row1", "row2", "row3", "row4"],
    "col": ["col0", "col1", "col2", "col3", "col4"],
    "val0": [0.81, 0.44, 0.77, 0.15, 0.81],
    "val1": [0.04, 0.07, 0.01, 0.59, 0.64]
})

# Pivot the DataFrame using pivot_table
df_pivoted = df.pivot_table(
    index="row",
    columns="col",
    values="val0",
    aggfunc="mean",
)

print(df_pivoted)

# Output:
     col0   col1   col2   col3   col4
row                                  
row0  0.77  0.445  0.000  0.860  0.650
row1  0.130  0.000  0.395  0.500  0.250
row2  0.000  0.310  0.000  0.545  0.000
row3  0.000  0.100  0.395  0.760  0.240
row4  0.000  0.000  0.000  0.000  0.000
Salin selepas log masuk

2. pd.DataFrame.groupby pd.DataFrame.unstack:

Kaedah ini melibatkan pengumpulan DataFrame mengikut indeks baris dan lajur yang dikehendaki, kemudian menggunakan unstack untuk memutar data terkumpul.

Contoh:

# Group the DataFrame by row and col
df_grouped = df.groupby(["row", "col"])

# Perform pivot using unstack
df_pivoted = df_grouped["val0"].unstack(fill_value=0)

print(df_pivoted)

# Output:
col   col0   col1   col2   col3   col4
row                                  
row0  0.81  0.445  0.000  0.860  0.650
row1  0.130  0.000  0.395  0.500  0.250
row2  0.000  0.310  0.000  0.545  0.000
row3  0.000  0.100  0.395  0.760  0.240
row4  0.000  0.000  0.000  0.000  0.000
Salin selepas log masuk

3. pd.DataFrame.set_index pd.DataFrame.unstack:

Kaedah ini melibatkan penetapan indeks baris dan lajur yang diingini sebagai indeks DataFrame, dan kemudian menggunakan unstack untuk memutar data.

Contoh:

# Set the row and col as the DataFrame's index
df = df.set_index(["row", "col"])

# Perform pivot using unstack
df_pivoted = df["val0"].unstack(fill_value=0)

print(df_pivoted)

# Output:
col   col0   col1   col2   col3   col4
row                                  
row0  0.81  0.445  0.000  0.860  0.650
row1  0.130  0.000  0.395  0.500  0.250
row2  0.000  0.310  0.000  0.545  0.000
row3  0.000  0.100  0.395  0.760  0.240
row4  0.000  0.000  0.000  0.000  0.000
Salin selepas log masuk

4. pd.DataFrame.pivot:

Kaedah ini menawarkan sintaks yang lebih mudah berbanding pivot_table, tetapi ia mempunyai fungsi terhad. Ia hanya membenarkan anda untuk menentukan indeks baris dan lajur, dan ia tidak boleh melakukan pengagregatan.

Contoh:

# Perform pivot using pivot
df_pivoted = df.pivot(index="row", columns="col")

print(df_pivoted)

# Output:
col   col0   col1   col2   col3   col4
row                                  
row0  key0  0.81  0.44  0.00  0.86  0.65
row1  key1  0.13  0.00  0.39  0.50  0.25
row2  key1  0.00  0.31  0.00  0.54  0.00
row3  key0  0.00  0.10  0.39  0.76  0.24
row4  key1  0.00  0.00  0.00  0.00  0.00
Salin selepas log masuk

Format panjang kepada format lebar

Untuk menukar DataFrame daripada format panjang kepada format lebar menggunakan hanya dua lajur:

1. pd.DataFrame.pivot(index=column_to_index, columns=column_to_columns, values=values_to_pivot**):

Contoh:

df["Combined"] = df["row"] + "|" + df["col"]
df_pivoted = df.pivot(index="Combined", columns="A", values="B")

print(df_pivoted)

# Output:
A         a     b    c
Combined
row0|col0  0.0  10.0  7.0
row1|col1  11.0  10.0  NaN
row2|col2  2.0  14.0  NaN
row3|col3  11.0   NaN  NaN
row4|col4   NaN   NaN  NaN
Salin selepas log masuk

2. pd.DataFrame.groupby pd.DataFrame.unstack:

df["Combined"] = df["row"] + "|" + df["col"]
df_grouped = df.groupby(["Combined", "A"])
df_pivoted = df_grouped["B"].unstack(fill_value=0)

print(df_pivoted)

# Output:
A         a     b    c
Combined
row0|col0  0.0  10.0  7.0
row1|col1  11.0  10.0  NaN
row2|col2  2.0  14.0  NaN
row3|col3  11.0   NaN  NaN
row4|col4   NaN   NaN  NaN
Salin selepas log masuk

Leperkan indeks berganda kepada satu indeks selepas pivot:

df_pivoted.columns = df_pivoted.columns.map("|".join)

print(df_pivoted)

# Output:
   a|col0  b|col0  c|col0  a|col1  b|col1  c|col1  a|col2  b|col2  c|col2  a|col3  b|col3  c|col3
row                                                                                        
row0    0.0   10.0    7.0   11.0   10.0    NaN    2.0   14.0    NaN    11.0    NaN    NaN
row1    0.0   10.0    7.0   11.0   10.0    NaN    2.0   14.0    NaN    11.0    NaN    NaN
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh Pivot Pandas DataFrame dalam Python?. 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