[Pandas] pandas.melt

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 

[Pandas] pandas.melt_第1张图片

# 设置id_vars=['col1'],表示col1不需要转换
# 未设置value_vars值,则剩下的col2和col3都需要被转换
res1 = pd.melt(df, id_vars=['col1'])

res1

[Pandas] pandas.melt_第2张图片

# 设置id_vars=['col1']和value_vars=['col3'],表示col1不需要转换,col3需要转换
res2 = pd.melt(df, id_vars=['col1'], value_vars=['col3'])

res2

[Pandas] pandas.melt_第3张图片

# 设置var_name和value_name值,自定义设置修改后的列名
res3 = pd.melt(df, id_vars=['col1'], value_vars=['col3'],
               var_name='col4', value_name='col5')

res3

[Pandas] pandas.melt_第4张图片

练习案例

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

[Pandas] pandas.melt_第5张图片

# 行列转换
bom_list = pd.melt(df, 
                   id_vars=["Material","Description"],
                   var_name="PN",
                   value_name="Usage")

bom_list

[Pandas] pandas.melt_第6张图片

你可能感兴趣的:(Pandas,pandas)