1. 程式人生 > 其它 >Python學習筆記:行列轉換之pandas.melt函式

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