首页 > 其他分享 >pandas 检查表单指定列是否有重复数据【实际业务实践】

pandas 检查表单指定列是否有重复数据【实际业务实践】

时间:2024-07-07 22:20:54浏览次数:1  
标签:背书 含财票 重复 成功 签收 表单 2024 pandas 银承

一、业务需求

财务系统中提报业务时,需要检查业务附件中的两列是否在当前电子表格内重复。
比如检查 票据编号 + 子票区间 是否有重复。

二、业务数据

以下是脱敏的真实业务数据。

制单号 制单状态 处理结果 业务种类 票据包号 子票区间 票据类型 票面金额 申请金额 对手方名称 出票日期 到期日期
1 208840626133302831331 交易成功 签收发送人行成功 背书转让签收 65301107020240302831331 19112233,26275680 银承(含财票) 71634.5 71634.5 北京杜甫作诗有限公司 2024-03-22 2024-09-12
2 208840626133302831330 交易成功 签收发送人行成功 背书转让签收 29000201420240302831330 1212955345,1217466500 银承(含财票) 45111.6 45111.6 北京杜甫作诗有限公司 2024-03-13 2024-09-13
3 208840626133302831329 交易成功 签收发送人行成功 背书转让签收 58401349620240402831329 337536497,348571889 银承(含财票) 110354 110354 北京杜甫作诗有限公司 2024-04-10 2024-07-15
4 208840626133302831328 交易成功 签收发送人行成功 背书转让签收 45802801320240302831328 69634753,80909193 银承(含财票) 112744 112744 北京杜甫作诗有限公司 2024-03-21 2024-09-21
5 208840626133302831327 交易成功 签收发送人行成功 背书转让签收 30300101020240302831327 1,3000000 银承(含财票) 30000 30000 北京杜甫作诗有限公司 2024-03-15 2024-09-15
6 208840626133302831326 交易成功 签收发送人行成功 背书转让签收 36205006620240302831326 7038872,7379009 银承(含财票) 3401.38 3401.38 北京杜甫作诗有限公司 2024-03-20 2024-09-20
7 208840626133302831325 交易成功 签收发送人行成功 背书转让签收 65301107020240302831325 9249633,18369632 银承(含财票) 91200 91200 北京杜甫作诗有限公司 2024-03-22 2024-09-12
8 208840626133302831324 交易成功 签收发送人行成功 背书转让签收 71553411920240302831324 1,14248000 银承(含财票) 142480 142480 北京杜甫作诗有限公司 2024-03-25 2024-09-25
9 208840626133302831323 交易成功 签收发送人行成功 背书转让签收 33101045120240302831323 19133190,30849752 银承(含财票) 117166 117166 北京杜甫作诗有限公司 2024-03-26 2024-09-26
10 208840626133302831322 交易成功 签收发送人行成功 背书转让签收 29000201420240302831330 1212955345,1217466500 银承(含财票) 18510 18510 北京杜甫作诗有限公司 2024-03-13 2024-09-13
11 208840626133302831321 交易成功 签收发送人行成功 背书转让签收 33750001520240302831321 1,5340534 银承(含财票) 53405.3 53405.3 北京杜甫作诗有限公司 2024-03-26 2024-09-26
12 208840626133302831320 交易成功 签收发送人行成功 背书转让签收 10000092920240402831320 1,257215 银承(含财票) 2572.15 2572.15 北京杜甫作诗有限公司 2024-04-24 2024-07-25
13 208840626133302831319 交易成功 签收发送人行成功 背书转让签收 52800021020240302831319 209605906,211605905 银承(含财票) 20000 20000 北京杜甫作诗有限公司 2024-03-28 2024-09-23
14 208840626133302831318 交易成功 签收发送人行成功 背书转让签收 10000113920240302831318 33000001,38000000 银承(含财票) 50000 50000 常州陆游电子科技有限公司 2024-03-22 2024-09-22
15 208840626133302831317 交易成功 签收发送人行成功 背书转让签收 10002609920240202831317 75000001,100000000 银承(含财票) 250000 250000 常州陆游电子科技有限公司 2024-02-26 2024-08-26
16 208840626133302831316 交易成功 签收发送人行成功 背书转让签收 33553501220240302831316 1,65611620 银承(含财票) 656116 656116 常州陆游电子科技有限公司 2024-03-06 2024-09-05
17 208840626133302831315 交易成功 签收发送人行成功 背书转让签收 29000005120240302831315 1,21546840 银承(含财票) 215468 215468 常州陆游电子科技有限公司 2024-03-19 2024-09-19
18 208840626133302831314 交易成功 签收发送人行成功 背书转让签收 30300101020240302831327 1,3000000 银承(含财票) 150000 150000 重庆欧阳修电器有限公司 2024-06-25 2024-12-25
19 208840626133302831313 交易成功 签收发送人行成功 背书转让签收 61101702920240602831313 1,10000000 银承(含财票) 100000 100000 重庆欧阳修电器有限公司 2024-06-18 2024-12-18
20 208840626133302831312 交易成功 签收发送人行成功 背书转让签收 61101702920240602831313 1,10000000 银承(含财票) 100000 100000 重庆欧阳修电器有限公司 2024-06-20 2024-12-20
21 208840626133302831311 交易成功 签收发送人行成功 背书转让签收 33101045120240302831311 19133190,30849752 银承(含财票) 81209.5 81209.5 武汉李清照美妆有限公司 2024-05-08 2024-08-08

三、解决方案

  1. 将两列拼接在一块;
  2. 使用 pandas 检查拼接列是否有重复,如有则标记;
  3. 取出重复的票据号。

参考代码:

import pandas as pd
from loguru import logger


def is_ticket_duplicate(df: pd.DataFrame) -> str:
    """[票据包号和子票区间]是否重复"""
    df = df[["票据包号", "子票区间"]]
    ticket_number = df["票据包号"] + "," + df["子票区间"]
    duplicate_flag = ticket_number.duplicated()
    if any(duplicate_flag):
        duplicate_number = "|".join(ticket_number[duplicate_flag].astype(str).tolist())
        logger.warning(f"发现重复票据号:{duplicate_number}")
        return duplicate_number
    return None

这里定义了一个函数,有重复数据时,返回重复的票据号(同一票据号重复多次时只返回一个),没有则返回 None
调用此函数时,判断返回为 None 时说明无重复,不为 None 时,返回的就是重复的票据号。

调用效果如下图所示。

image

标签:背书,含财票,重复,成功,签收,表单,2024,pandas,银承
From: https://www.cnblogs.com/amnotgcs/p/18289015

相关文章

  • 按指定日期重复
     问题:根据D1指定的日期将A2:C8区域进行重复公式1(姓名)右拉下拉完成=INDEX(A:A,MOD(ROW(A1)+COUNTA(A:A)-2,COUNTA(A:A)-1)+2)公式2(日期)下拉完成=SUBSTITUTE(LEFT(D$1,FIND("-",D$1)-1),".","/")+(ROW(A1)-1)/(COUNTA(A:A)-1)公式3(全部)动态数组=LET(a,COUNTA(A:A)-1,b,SUM......
  • 【力扣】每日一题—第217题,存在重复元素
    目录题目:开始思路:更改思路:上代码:题目:给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。开始思路:暴力求解两重for循环直接出结果,但是超时了!!!超时了命苦!!!更改思路:先排序后遍历成功了哎,不过如此,嘿嘿嘿......
  • Python Pandas实现高效表格自动化处理
    1.Pandas简介Pandas是Python中用于数据分析和处理的强大库,它提供了高性能、易用的数据结构和工具。对于处理结构化数据,特别是表格数据,Pandas是一个不可或缺的工具。本文将介绍如何使用Pandas进行表格自动化处理。2.安装Pandas使用pip安装Pandas:pipinstallpandas......
  • 自定义流程表单开发优势体现在什么地方?
    提质、增效、降本,应该是很多职场办公需要实现的发展目标。那么,应用什么样的软件平台可以实现?低代码技术平台、自定义流程表单开发是目前流行于职场行业中的软件产品,可视化操作界面、够灵活、易维护等优势特点明显,在推进企业实现流程化办公的过程中深受欢迎。一起来了解自自定义流......
  • 从Pandas到Polars
    这里展示了如何将一些熟悉的Pandas命令转换为Polars。另外也介绍Pandas和Polars之间一些根本区别。在以下示例中,将Polarsv0.20.10与Pandasv2.2.0进行比较。首先在Polars中创建一个样本数据集importpolarsasplimportpolars.selectorsascsimportpandasaspdim......
  • Pandas时间序列
    Pandas时间序列1.字符串转换为时间pd.to_datetime(列)如下字符串格式可以转换为时间202407042024.07.042024/07/0404/07/202404-July-2024importpandasaspddata={'日期':['2024/07/04','2024/07/05','2024/07/06'],'运动开始时间&#......
  • Pandas函数汇总
    一、Pandas数据结构        1.Series                1)Series的创建                        s=Series(a)  #a:列表或NumPy数组或字典        2)Series的属性                  ......
  • 跟我一起学习和开发动态表单系统-动态表单系统的技术实现与优势(2)
    动态表单系统的技术实现与优势随着业务的发展,企业对信息系统的需求越来越复杂。传统的静态表单无法满足灵活调整和扩展的需求,而动态表单系统能够根据业务场景灵活地调整表单结构,提高开发效率和用户体验。本文将介绍一种基于Vue、ElementUI和SpringBoot+MyBatis的动态表单系统......
  • Python酷库之旅-第三方库Pandas(001)
    目录一、Pandas库的由来1、背景与起源1-1、开发背景1-2、起源时间2、名称由来3、发展历程4、功能与特点4-1、数据结构4-2、数据处理能力5、影响与地位5-1、数据分析“三剑客”之一5-2、社区支持二、Pandas库的应用场景1、数据分析2、数据清洗3、数据可视化4、......
  • 跟我一起学习和开发动态表单系统-前端用vue、elementui实现方法(3)
    基于Vue、ElementUI和SpringBoot+MyBatis的动态表单系统前端实现解析在现代企业信息系统中,动态表单是一种非常常见的功能。它可以根据业务需求灵活地调整表单结构,以满足不同的数据收集和展示需求。在本文中,我们将探讨一种基于Vue、ElementUI和SpringBoot+MyBatis......