melt是溶解 / 分解的意思,即拆分数据
melt()函数可以将一些列的内容进行合并,把宽表整合成长表
语法格式
pandas.melt(frame,
id_vars=None,
value_vars=None,
var_name=None,
value_name='value')
参数说明
frame:要处理的数据集
id_vars:不需要被转换的列名
value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写
var_name:自定义设置variable列的列名
value_name:自定义设置value列的列名
导入数据
import pandas as pd
df = pd.DataFrame({"col1":[1,1,1,1,1],
"col2":[2,2,2,2,2],
"col3":["a","a","a","b","b"]})
df
# 设置id_vars=['col1'],表示col1不需要转换
# 未设置value_vars值,则剩下的col2和col3都需要被转换
res1 = pd.melt(df, id_vars=['col1'])
res1
# 设置id_vars=['col1']和value_vars=['col3'],表示col1不需要转换,col3需要转换
res2 = pd.melt(df, id_vars=['col1'], value_vars=['col3'])
res2
# 设置var_name和value_name值,自定义设置修改后的列名
res3 = pd.melt(df, id_vars=['col1'], value_vars=['col3'],
var_name='col4', value_name='col5')
res3
练习案例
import pandas as pd
df = pd.DataFrame({"Material":['08-0871-02','08-0960-04','12-0970-02','11-0721-01'],
"Description":['A123','B456','C789','D741'],
"68-101884-04":[0, 0, 0, 1],
"800-43712-12":[1, 1, 0, 0],
"73-20114-01":[0, 0, 0, 0]})
df
# 行列转换
bom_list = pd.melt(df,
id_vars=["Material","Description"],
var_name="PN",
value_name="Usage")
bom_list