数据溶解——pandas.melt方法详解

pandas.melt() 是一个非常有用的函数,用于将宽格式的数据框(wide format DataFrame)转换为长格式(long format DataFrame)。这个函数通过将多个列“熔化”为行的方式,使数据从列变成行,从而更加适合进行某些分析和可视化操作。

语法:

pd.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)

参数解释:

  1. frame:

    • 要进行熔化的 DataFrame
  2. id_vars:

    • 保持不变的列(标识列)。这些列不会被熔化,而是保留为最终输出的 DataFrame 中的标识变量。
    • 传入字符串或字符串的列表。
  3. value_vars:

    • 需要被“熔化”的列,也就是被转换为行的列。如果没有指定,则会自动选择除 id_vars 外的所有列。
    • 传入字符串或字符串的列表。
  4. var_name:

    • 新的“变量”列的名称(即熔化后的列名)。
    • 默认值为 variable
  5. value_name:

    • 新的“值”列的名称。
    • 默认值为 value
  6. col_level:

    • 如果列是多层索引(MultiIndex),指定要使用的列级别。
  7. ignore_index:

    • 是否忽略索引,默认为 True。设置为 False 则保留原始数据的索引。

使用举例:

示例 1:基础用法

假设有一个宽格式的数据框,记录了某些人的年度数据,如下:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Year_2019': [65, 72, 58],
    'Year_2020': [70, 75, 60]
})

print(df)

输出结果:

       Name  Year_2019  Year_2020
0     Alice         65         70
1       Bob         72         75
2   Charlie         58         60

使用 pd.melt() 将其转换为长格式:

df_melted = pd.melt(df, id_vars=['Name'], var_name='Year', value_name='Score')
print(df_melted)

结果:

       Name      Year  Score
0     Alice  Year_2019     65
1       Bob  Year_2019     72
2   Charlie  Year_2019     58
3     Alice  Year_2020     70
4       Bob  Year_2020     75
5   Charlie  Year_2020     60

解释:

  • id_vars=['Name'] 指定 Name 列保持不变,作为标识列。
  • var_name='Year' 指定原始列名 Year_2019Year_2020 被熔化后,存放在 Year 列中。
  • value_name='Score' 指定熔化后的值放在 Score 列中。
示例 2:指定 value_vars

如果你只想熔化特定的列,可以使用 value_vars 参数来选择。

df_melted = pd.melt(df, id_vars=['Name'], value_vars=['Year_2020'], var_name='Year', value_name='Score')
print(df_melted)

输出:

       Name      Year  Score
0     Alice  Year_2020     70
1       Bob  Year_2020     75
2   Charlie  Year_2020     60
示例 3:多层列索引(MultiIndex)中的使用

如果 DataFrame 中有多层列索引,可以使用 col_level 参数来指定熔化某个级别的列。

import pandas as pd

df_multi = pd.DataFrame({
    ('Class A', 'Year_2019'): [65, 72, 58],
    ('Class A', 'Year_2020'): [70, 75, 60],
    ('Class B', 'Year_2019'): [55, 62, 48],
    ('Class B', 'Year_2020'): [60, 65, 50]
}, index=['Alice', 'Bob', 'Charlie'])

print(df_multi)

输出:

         Class A          Class B        
         Year_2019 Year_2020 Year_2019 Year_2020
Alice          65        70        55        60
Bob            72        75        62        65
Charlie        58        60        48        50

如果我们想要熔化其中的一个层级,可以使用 col_level 参数。

df_melted = pd.melt(df_multi, col_level=0)
print(df_melted)

输出:

     Class_A  Class_B  value
0   Year_2019     NaN     65
1   Year_2019     NaN     72
2   Year_2019     NaN     58
3   Year_2020     NaN     70
4   Year_2020     NaN     75
5   Year_2020     NaN     60

总结

pd.melt() 是一种方便的函数,用于将宽格式数据转换为长格式,特别适用于需要将多列数据整合为两列时。它适合数据整形、可视化前的数据准备以及合并多个列的数据分析任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥猪猪爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值