Home > Backend Development > Python Tutorial > How Can I Efficiently Melt and Unmelt Pandas DataFrames?

How Can I Efficiently Melt and Unmelt Pandas DataFrames?

Linda Hamilton
Release: 2024-12-20 09:48:10
Original
590 people have browsed it

How Can I Efficiently Melt and Unmelt Pandas DataFrames?

Melting a Pandas Dataframe

Introduction

In Pandas, melting dataframes involves transposing data from a wide format to a long format, making it useful for various data manipulation tasks. This article will guide you through the process of melting dataframes and explore different scenarios with real-world examples.

Problem 1: Transposing Column Data

Objective: Transpose columns into rows while repeating the original column names.

Solution:

df.melt(id_vars=['Name', 'Age'], var_name='Subject', value_name='Grades')
Copy after login

This code will create a new dataframe with 'Subject' and 'Grades' columns, while the original column names will be repeated for each row.

Example:

df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
                   'Math': ['A+', 'B', 'A', 'F', 'D', 'C'],
                   'English': ['C', 'B', 'B', 'A+', 'F', 'A'],
                   'Age': [13, 16, 16, 15, 15, 13]})

melted_df = df.melt(id_vars=['Name', 'Age'], var_name='Subject', value_name='Grades')

print(melted_df)
Copy after login

Output:

   Name  Age Subject Grades
0   Bob   13  English     C
1  John   16  English     B
...
11  Tom   13     Math     C
Copy after login

Problem 2: Filtering Columns

Objective: Melt specific columns, excluding others.

Solution:

df.melt(id_vars=['Name', 'Age'], value_vars='Math', var_name='Subject', value_name='Grades')
Copy after login

In this example, only the 'Math' column is melted while 'Age' and 'Name' are retained as identifiers.

Example:

melted_df = df.melt(id_vars=['Name', 'Age'], value_vars='Math', var_name='Subject', value_name='Grades')

print(melted_df)
Copy after login

Output:

   Name  Age Subject Grades
0   Bob   13    Math    A+
1  John   16    Math     B
...
Copy after login

Problem 3: Grouping and Ordering Melted Data

Objective: Group the melted data and sort by values.

Solution:

melted_df.groupby('value', as_index=False).agg({
    'Subject': ', '.join,
    'Grades': ', '.join
}).sort_values('value', ascending=True)
Copy after login

This code will group the melted data by score and join the 'Subject' and 'Grades' values with commas.

Example:

grouped_df = melted_df.groupby('value', as_index=False).agg({
    'Subject': ', '.join,
    'Grades': ', '.join
}).sort_values('value', ascending=True)

print(grouped_df)
Copy after login

Output:

  value             Name                Subjects
0     A         Foo, Tom           Math, English
1    A+         Bob, Bar           Math, English
2     B  John, John, Foo  Math, English, English
...
Copy after login

Problem 4: Unmelting Dataframes

Objective: Reverse the melting process, returning to the original format.

Solution:

melted_df.pivot_table("Grades", ['Name', 'Age'], 'Subject', aggfunc='first').reset_index()
Copy after login

This code will pivot the melted dataframe back to the original wide format.

Example:

unmelted_df = melted_df.pivot_table("Grades", ['Name', 'Age'], 'Subject', aggfunc='first').reset_index()

print(unmelted_df)
Copy after login

Output:

   Name  Age Math English
0   Alex   15    D       F
1   Bar   15    F      A+
2   Bob   13   A+       C
3   Foo   16    A       B
...
Copy after login

Problem 5: Grouping and Combining Columns

Objective: Group data by a specific column and combine other columns with commas.

Solution:

melted_df.groupby('Name', as_index=False).agg(
    Subjects=', '.join,
    Grades=', '.join
)
Copy after login

This code will group the data by 'Name' and combine 'Subject' and 'Grades' with commas.

Example:

grouped_df = melted_df.groupby('Name', as_index=False).agg(
    Subjects=', '.join,
    Grades=', '.join
)

print(grouped_df)
Copy after login

Output:

   Name        Subjects Grades
0  Alex  Math, English   D, F
1   Bar  Math, English  F, A+
2   Bob  Math, English  A+, C
...
Copy after login

Problem 6: Melting All Columns

Objective: Convert all columns into rows, including identifiers.

Solution:

df.melt(var_name='Column', value_name='Value')
Copy after login

This code will melt all columns into rows, treating all data as values.

Example:

melted_df = df.melt(var_name='Column', value_name='Value')

print(melted_df)
Copy after login

Output:

    Column Value
0       Age    16
1       Age    16
2       Age    15
...
11  English     C
12     Math     A
13     Math    A+
Copy after login

The above is the detailed content of How Can I Efficiently Melt and Unmelt Pandas DataFrames?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template