管道处理pipe和explode方法使用实例-库位分离,提取合格和半成品库位

实例需求:

每个货号的库位信息包含多个库位,需要把合格库位和半成品库位分离出来
image-20220525070524339

解决步骤:

  1. 导入模块,建立sqlite连接器
# %% 提取数据 从sqlite

import pandas as pd
from sqlalchemy import create_engine
'''创建sqlite3连接'''
eg = create_engine('sqlite:///F:/XX/Database/xx2022.db')  #创建数据库连接

# 读取数据库文件

q_store = """

select *  from pj_store

"""
  1. 从sqlite提取想要的数据
cols= ['节庆','货号','库位']
df_store = pd.read_sql(q_store,eg)[cols].query('节庆=="夏季"').fillna("X")  #空值用X填充,否则会出错

image-20220525070524339

  1. 设置哪些式半成品库位
# %% 设置哪些是半成品库位
address_banA2 = ['A2-'+str(x) for x in range(16,34,1)] #半成品库位A2-16~33
address_banA8 = ['A8-'+str(x) for x in range(30,32,1)] #半成品库位A8-30~31
address_banA5 = ['A5-'+str(x) for x in range(1,15,1)] #半成品库位A5-1~15
address_banA15 = ['A15-'+str(x) for x in range(1,15,1)] #半成品库位A15-1~15
address_banA11 = ['A11-'+str(x) for x in range(1,14,1)] #半成品库位A11-1~13
address_ban = address_banA2+address_banA8+address_banA5+address_banA15+address_banA11
  1. 设置处理函数

    • 库位分离函数,拆分单元格内库位并多行显示
    def explode_table(df):
        df['库位'] = df['库位'].str.split(' ')  # 对合格库位多行分割
        df = df.explode('库位')
        return df
    
    • 筛选提取半成品库位
    def get_address_ban(df):
        return df.query('库位 in @address_ban') # @,外部变量
    
    • 筛选提取良品库位
    def get_address_good(df):
        return df.query('库位 not in @address_ban') 
    
    • 合并同一货号多个库位的到同一个单元格
    # 合并库位到1个单元格
    def join_address(df):
        return ' '.join(df.values)
    
  2. 筛选提取库位

    #用管道pipe加载函数
    df_temp = df_store.pipe(explode_table)[['货号','库位']]  # 对库位进行分离
    df_ban = df_temp.pipe(get_address_ban)   # 提取半成品库位
    df_liang = df_temp.pipe(get_address_good) # 提取良品库位
    
    
  3. 多个库位合并到1个单元格

    df_ban =df_ban.groupby(by='货号').agg(join_address).reset_index()    # 半成品库位
    df_good = df_liang.groupby(by='货号').agg(join_address).reset_index() #良品库位
    
  4. 输出结果

    df_good

    image-20220525070554394
    df_ban

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值