一、介紹
數據分析中經常需要進行“行列轉化”。
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()詳解