Python学习笔记:行列转换之pandas.melt函数

一、介绍

数据分析中经常需要进行“行列转化”。

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()详解

原文地址:https://www.cnblogs.com/hider/p/15769238.html