一、介绍
数据分析中经常需要进行“行列转化”。
pandas.melt()
函数可以实现将 “宽数据” → “长数据”的一种列转行变换。
类似于 Excel
中的透视表(pivot
)和逆透视表的操作。
可选择地保留设置的标识符变量。
1. 使用语法
pandas.melt(frame,
id_vars=None,
value_vars=None,
var_name=None,
value_name='value',
col_level=None,
ignore_index=True)
2.参数解释
frame -- 要处理的数据框 DataFrame
id_vars -- 不需要被转换的列名
value_vars -- 需要转换的列名 默认剩余全部
var_name、value_name -- 自定义设置对应的列名
ignore_index -- 是否忽略原始索引
col_level -- 多层索引 MultiIndex
二、实操
1.构建测试数据集
import pandas as pd
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
'B': {0: 1, 1: 3, 2: 5},
'C': {0: 2, 1: 4, 2: 6}
})
df
'''
A B C
0 a 1 2
1 b 3 4
2 c 5 6
'''
2.默认转换
pd.melt(df, id_vars=['A'], value_vars=['B'])
'''
A variable value
0 a B 1
1 b B 3
2 c B 5
'''
pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
'''
A variable value
0 a B 1
1 b B 3
2 c B 5
3 a C 2
4 b C 4
5 c C 6
'''
3.设置列名
pd.melt(df, id_vars=['A'], value_vars=['B'],
var_name='myVarName', value_name='myValueName')
'''
A myVarName myValueName
0 a B 1
1 b B 3
2 c B 5
'''
4.忽略索引
pd.melt(df, id_vars=['A'], value_vars=['B', 'C'],
ignore_index=False)
'''
A variable value
0 a B 1
1 b B 3
2 c B 5
0 a C 2
1 b C 4
2 c C 6
'''
5.多重索引
# 多重索引
df.columns = [list('ABC'), list('DEF')]
df
'''
A B C
D E F
0 a 1 2
1 b 3 4
2 c 5 6
'''
# 选择最外层索引
pd.melt(df, col_level=0, id_vars=['A'], value_vars=['B'])
'''
A variable value
0 a B 1
1 b B 3
2 c B 5
'''
# 选择内层索引
pd.melt(df, col_level=1, id_vars=['D'], value_vars=['E'])
# 选择复合索引
pd.melt(df, id_vars=[('A', 'D')], value_vars=[('B', 'E')])
'''
(A, D) variable_0 variable_1 value
0 a B E 1
1 b B E 3
2 c B E 5
'''
三、逆操作
可以使用 pivot
透视的操作,来解压缩一个 DataFrame
对象。
df.pivot(index='col1', columns='col2')
参考链接:Pandas 的melt的使用
参考链接:pandas.melt
参考链接:pandas函数-melt
参考链接:pandas.melt()详解