⽤Python做⼀个简单的对账脚本
#⼯作中常常碰到需要对账的情况,有时候订单量既不⼤⼜不⼩的时候,⽤python的pandas库可以⽅便的对账,100万条左右的数据也是很⽅便的
如果2⽅都是成功的订单⽐较简单,对账的结果就是⼀⽅有另⼀⽅⽆,⼆⽅价格不⼀致的情况
1.需要对原始数据进⾏处理,出可以匹配的字段,如果原始数据是资⾦明细,⼀笔订单可能对应2笔流⽔,那么需要对原始资⾦明细进⾏处理,把2条流⽔(往往是⼀正⼀负)
2.核对完毕后需要把对账差异的明细和汇总的结果导出
第⼀个函数校验⼀下有没有重复的订单号,订单号不唯⼀要查原因再作核对
def wy(df,ord_name):
a=df[df.duplicated(subset=ord_name)][ord_name]#把重复的订单号出来
b=df[df[ord_name].isin(a)]#根据订单号把这样订单都拉出来
upby(b[ord_name]).count().reset_index()#对这些重复订单计下数
return b,c
def duizhang(data_A,data_B,A_ord,B_ord,A_price,B_price):
t1=time.time()
(data_A,data_B,how='outer',left_on=A_ord,right_on=B_ord,sort=False)
dz['差额']=dz[A_price]-dz[B_price]
result=dz[dz['差额']!=0]#如果⼀边有数据⼀边没有数据订单肯定也属于!=0的范畴
<_excel((os.path.abspath(os.path.pardir))+"\\"+"对账结果.xlsx",index=False)
isnull的用法t2=time.time()#记下时间,⼀般100万左右的订单量python跑起来还是很快的
print(t2-t1)
hz={'⾦额':[dz[dz['差额'].notnull()]['差额'].sum(),
dz[dz['差额'].isnull().values==True][A_price].sum(),
-
dz[dz['差额'].isnull().values==True][B_price].sum(),
data_A[A_price].sum(),
-data_B[B_price].sum(),]}#负号是为了⽅便计算
hz2=DataFrame(hz,index=['A⽅减B⽅差价','A⽅有B⽅⽆','A⽅⽆B⽅有','A⽅⾦额','B⽅⾦额'])#index的名字可以改下
<_excel((os.path.abspath(os.path.pardir))+"\\"+"差异汇总.xlsx",index=True)
return result,hz2
if __name__=='__main__':
if wy(data_1,'订单号')[0].count()[0]==0or wy(data_1,'订单号')[0].count()[0]:#如果有重复的订单号需要先查原因
dzjg=duizhang(data_1,data_2,'A⽅订单号的字段名','B⽅订单号的字段名','A⽅价格的字段名','B⽅价格的字段名')
else:
print("有重复订单号,请查询")
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论