Pandas melt() 的巧妙运用----逆透视

如果希望把excel 中的长数据’压扁‘显示,就可以使用df.melt()方法,实现的为逆透视的过程。

import pandas as pd

df = pd.ExcelFile(r'C:\Users\jackey\Desktop\FL/inventory_summary_202109262031.xlsx')

df_new = pd.DataFrame()

for name in df.sheet_names:

    #获取每个Sheet的名称
    df_pre = df.parse(sheet_name=name)

    df_pre.rename(columns={'Unnamed: 0':'Lot'},inplace=True)

    # print(df_pre.columns)

    col=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]

    df_pre2=df_pre.melt(
        id_vars='Lot',
        value_vars=col,
        var_name='Wafer ID',
        value_name='数量',
    )

    df_pre2['品名']=name
    df_pre2 = df_pre2[['品名', 'Lot', 'Wafer ID', '数量']]

    df_pre2=df_pre2.convert_dtypes()

    # print(df_pre2.dtypes)

    df_pre2.sort_values(by=['Lot','Wafer ID'], ascending=[True,True],inplace=True)

    df_new = df_new.append(df_pre2)


df_new.dropna(subset=['数量'],inplace=True)

df_new=df_new[df_new['数量']!=0]

df_new.reset_index(drop=True,inplace=True)

df_new.to_excel(r'C:\Users\jackey\Desktop\FL/inventory_summary_20210930.xlsx',sheet_name='inventory_summary')

语法结构

具体语法结构如下:

pd.melt(frame: pandas.core.frame.DataFrame,
        id_vars=None, value_vars=None,
        var_name='variable', value_name='value',
        col_level=None)

其中:

  • id_varstuple,list或ndarray(可选),用作标识变量的列。
  • value_varstuple,列表或ndarray,可选,要取消透视的列。 如果未指定,则使用未设置为id_vars的所有列。
  • var_namescalar,用于“变量”列的名称。 如果为None,则使用frame.columns.name或“variable”。
  • value_namescalar,默认为“ value”,用于“ value”列的名称。
  • col_levelint或str,可选,如果列是MultiIndex,则使用此级别来融化。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值