当前位置: 移动技术网 > IT编程>脚本编程>Python > 用Python做一个简单的对账

用Python做一个简单的对账

2020年07月07日  | 移动技术网IT编程  | 我要评论

#工作中常常碰到需要对账的情况,有时候订单量既不大又不小的时候,用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)]#根据订单号把这样订单都拉出来
    c=b.groupby(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()
    dz=pd.merge(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的范畴
    result.to_excel((os.path.abspath(os.path.pardir))+"\\"+"对账结果.xlsx",index=False)  
    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的名字可以改下
    hz2.to_excel((os.path.abspath(os.path.pardir))+"\\"+"差异汇总.xlsx",index=True)
    return result,hz2
if __name__=='__main__':
    if wy(data_1,'订单号')[0].count()[0] ==0 or wy(data_1,'订单号')[0].count()[0]:#如果有重复的订单号需要先查原因
        dzjg=duizhang(data_1,data_2,'A方订单号的字段名','B方订单号的字段名','A方价格的字段名','B方价格的字段名')
    else:
        print("有重复订单号,请查询")

本文地址:https://blog.csdn.net/u010564788/article/details/107133503

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网