用Python做一个简单的对账
程序员文章站
2022-05-07 18:17:45
#工作中常常碰到需要对账的情况,理想的状态是开发功能,有时候订单量既不大又不小的时候,用python100万毫无压力毫无压力。如果2边都是成功的订单稍微简单点,但是2边都是全量的订单则较难处理,往往不同的系统对于成功的描述会不同,比如有些是’success’,有些则是一个数字,或者是“成功”以后续供业务人员具体处理。另外一种是资金明细,一笔订单有2笔,那么需要对原始资金明细进行,如果一边是资金明细,一边是订单明细,那么最好,记录下时间差,后期再调整,......
#工作中常常碰到需要对账的情况,有时候订单量既不大又不小的时候,用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
下一篇: B2B社交媒体的营销策略技巧