Python學習筆記:行列轉換之pandas.melt函式
阿新 • • 發佈:2022-01-06
一、介紹
資料分析中經常需要進行“行列轉化”。
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()詳解