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

news/2024/11/21 2:33:33/文章来源:https://www.cnblogs.com/amnotgcs/p/18289015

一、业务需求

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

二、业务数据

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

制单号 制单状态 处理结果 业务种类 票据包号 子票区间 票据类型 票面金额 申请金额 对手方名称 出票日期 到期日期
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 loggerdef 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_numberreturn None

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

调用效果如下图所示。

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739988.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kindle电子书_使用Calibre给kindle远程传书的两种方式:网页浏览器与KOreader客户端传书

因为想使用KOreader的无框架模式,不用看书看着看着就重启KOreader,所以打算找找有什么办法使用KOreader无线传书。查到具体办法之后顺便写一下在非越狱的kindle上使用自带浏览器配合Calibre传书的方法。 使用网页浏览器点击Calibre的连接/共享中的“启动内容服务器”的选项,…

春秋杯 2024夏季

BEDTEA [题目制作过程]: 首先是通过矩阵相乘的方法来获取斐波那契数列来作为后面tea的每一轮的key,tea的轮数常数和左移右移都被魔改了,加了PEB的反调试,这个调试的作用是key从第几位取,如果正常运行则是从第三个开始取,考察师傅们面对tea的魔改的能力,然后将加密后的数…

西瓜杯 WP

RE 一个西瓜切两半你一半我一半 有点谜语,文本给的是输出和key # Visit https://www.lddgo.net/string/pyc-compile-decompile for more information # Version : Python 3.6flag= key = 一个西瓜切两半你一半我一半 # output=乃乾觅甯剏乳厡侻丨厏扝乌博丿乜规甲剌乶厝侥丿卻…

双亲委派机制和SPI的理解

双亲委派机制和SPI的理解 双亲委派机制基本原理 双亲委派机制简单的来说是JVM类加载过程的一个非强约束模型。子类加载器加载对应的Class,不会直接加载,首先会交由其父类加载器加载,若父类加载器无法加载,则由自己加载。 Java一共有三层类加载器,级别从上往下依次是:Boot…

Simple WPF: WPF 自定义按钮外形

WPF的按钮提供了Template模板,可以通过修改Template模板中的内容对按钮的样式进行自定义。结合资源字典,可以将自定义资源在xaml窗口、自定义控件或者整个App当中调用最新内容优先发布于个人博客:小虎技术分享站,随后逐步搬运到博客园。 WPF的按钮提供了Template模板,可以…

三维重建工作的一些调研

GPT关于3D-GS的回答如果我获得了一个3D高斯溅射的表达,给定任意的相机内参和外参,是不是就能生成一副2D图像Yes, given a 3D Gaussian splatting representation and the intrinsic and extrinsic camera parameters, you can generate a 2D image from any desired viewpoin…

Spark Special_杨宁远 杂题分析.md

Spark Special 图论_杨宁远 杂题分析 Date: 2024-07-03 Preface 本文基于杨宁远 @ynycoding 的课件与题单,对省选/NOIP阶段图论的建模方法和解题策略进行总结,以及本阶段常用方法、模型和 Trick。 A. [AGC056C] 0/1 Balanced [AGC056C] 01 Balanced - 洛谷 | 计算机科学教育新…

按指定日期重复

问题:根据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(…

语法2-运算符、包机制、JavaDoc

语法 运算符 运算符具有优先级-网上查(一般使用括号保证)/-除,%-取余符号-21/10二十一除十取余数,幂运算使用工具类表示Math.pow(2,3)-2的3次方 ++自加,--自减 int a =3 ; int b =a++;//输出a=4,b=3 int b =++a;//输出a=4,b=4==-等于,!=-instanceof-不等于逻辑运算符-与或…

厦门福州七日游

厦门福州七日游2024-06-30 上午被发短信告知航班延误两个半小时。 晚上八点多九点才到了厦门,湘妹 yhp yzf 已经在酒店了。厦门机场不通地铁?????于是打了个车去地铁站。 酒店就在中山路步行街上,有各种店铺。点了一份外卖,和大伙打了一会三国杀,输了几局 2024-07-01 …

SumIf的问题

问题:进销存表数据等于同货号入库表中数据 函数公式解决:=SUMIF(入库!A:A,B3,入库!C:C)

7/8死神永生服周报第七期

1. 死神永生新闻 2. 死神永生服TNT军事基地[三] 3. 死神永生服的古代建筑之自然选择号目录死神永生新闻 死神永生服TNT军事基地[三] 死神永生服的古代建筑之自然选择号这几天又没上死神永生,主要是期末比较繁忙,因此又停了一期。。真的很抱歉。死神永生新闻前一周的治理新闻时…