DataFrame.melt 方法用于“熔化”数据,将宽格式数据转换为长格式数据(long format),这在数据可视化和分析时非常有用。可以将多个列“堆叠”到一个列中,从而更方便地进行分组和聚合。melt() 适用于将 宽格式数据 转换为 长格式数据。本文主要介绍一下Pandas中pandas.DataFrame.melt方法的使用。

DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None) [source]

"Unpivots" DataFrame从宽格式转换为长格式,可选保留设置的标识符变量。

这个函数对于将DataFrame转换成这样一种格式非常有用,其中一个或多个列是标识符变量(id_vars),而所有其他列(被认为是测量变量(value_vars))都"unpivoted"到行轴,只留下两个非标识符列"variable"和"value"。

参数

rame : DataFrame

id_vars:tuple, list,或ndarray,可选

用作标识符变量的列。

value_varstuple, list, 或 ndarray,可选

要unpivot的列。如果未指定,

则使用未设置为id_vars的所有列。

var_name:标量

用于variable列的名称。如果为None

则使用 frame.columns.namevariable

value_name:标量,默认为value

用于value列的名称。

col_levelintstring,可选

如果列是MultiIndex,则使用此级别进行融合。

例子

1)仅转换 'B' 列

import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({
    'A': {0: 'a', 1: 'b', 2: 'c'},
    'B': {0: 1, 1: 3, 2: 5},
    'C': {0: 2, 1: 4, 2: 6}
})

print("原始 DataFrame:")
print(df)

# 仅转换 'B' 列
melted_df1 = df.melt(id_vars=['A'], value_vars=['B'])
print("\n转换 'B' 列后的 DataFrame:")
print(melted_df1)

2)转换 'B' 和 'C' 列

import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({
    'A': {0: 'a', 1: 'b', 2: 'c'},
    'B': {0: 1, 1: 3, 2: 5},
    'C': {0: 2, 1: 4, 2: 6}
})

# 转换 'B' 和 'C' 列
melted_df2 = df.melt(id_vars=['A'], value_vars=['B', 'C'])
print("\n转换 'B' 和 'C' 列后的 DataFrame:")
print(melted_df2)

3)自定义列名

import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({
    'A': {0: 'a', 1: 'b', 2: 'c'},
    'B': {0: 1, 1: 3, 2: 5},
    'C': {0: 2, 1: 4, 2: 6}
})

# 自定义列名
melted_df3 = df.melt(id_vars=['A'], value_vars=['B'], var_name='myVarname', value_name='myValname')
print("\n自定义列名后的 DataFrame:")
print(melted_df3)

4)指定 col_level 进行 melt

import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({
    'A': {0: 'a', 1: 'b', 2: 'c'},
    'B': {0: 1, 1: 3, 2: 5},
    'C': {0: 2, 1: 4, 2: 6}
})

# 创建具有多层索引的 DataFrame
df.columns = [list('ABC'), list('DEF')]
print("\n多层索引 DataFrame:")
print(df)

# 指定 col_level 进行 melt
melted_df4 = df.melt(col_level=0, id_vars=['A'], value_vars=['B'])
print("\n使用 col_level=0 转换 'B' 列后的 DataFrame:")
print(melted_df4)

5)多层索引 melt

import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({
    'A': {0: 'a', 1: 'b', 2: 'c'},
    'B': {0: 1, 1: 3, 2: 5},
    'C': {0: 2, 1: 4, 2: 6}
})

# 创建具有多层索引的 DataFrame
df.columns = [list('ABC'), list('DEF')]
print("\n多层索引 DataFrame:")
print(df)

# 多层索引 melt
melted_df5 = df.melt(id_vars=[('A', 'D')], value_vars=[('B', 'E')])
print("\n多层索引转换 'B' 列后的 DataFrame:")
print(melted_df5)

推荐文档

相关文档

大家感兴趣的内容

随机列表