某某航空 - 三方对账案例

一、需求:

支付宝账单:

  1.支付数据筛选:①筛选L列业务类型为:交易付款 即为所有支付交易;②比对所需内容为B列的交易流水号以及H列的收
  入金额,C列起始票号。

淘宝账单:

1.附件“国际预订成功”表中,比对所需内容为AL列的“银行订单号”以及V列的“总价”,相同的银行订单号,总价相加;
2.附件“国内预订成功”表中,比对所需内容为Z列的“支付宝流水号”以及S列的“航段全价”,相同支付宝流水号下的价格相加;
3.附件“国内改签订单”表中,比对所需内容为W列的“支付宝流水号”以及Q列的“改签费总金额”,
注意:W列以及Q列订单及金额均有重复,需去重以及金额平摊后方可进行数据统计。

以上支付宝数据 1 与淘宝数据 1+2+3 进行比对为支付宝与淘宝的支付交易核对。再将支付数据与淘宝数据的差异与“三方对账支付差异核对”文件比对。

二、数据源:

1.支付数据格式如下图:文本为CSV格式


2.淘宝数据有三份数据,分别为:国际、国内、改签订单,文本为CSV格式,数据格式如下:(国际、国内、改签格式差不多)

三、解决方法:

此项目所用到的方法都在此贴:
http://support.i-search.com.cn/article/1566306723522

四、思路:

1.1、首先读取 CSV 格式文件:

代码如下:

f = open(self.gv_path+'/'+'dh_demo/files/dh/tb/zf/20882015460911320156_20190623_账务明细.csv')
df = pd.read_csv(f,sep=',',header=4,encoding='utf-8',
usecols=['业务流水号', '收入金额(+元)','业务类型','起始票号'])

代码中可以看到,由于并不需要整个文本中的数据,因而,可以像读 Excel 文件一样,只读取需要的几列。

http://support.i-search.com.cn/article/1566369470794 贴中也写到了,若读取 CSV 文件遇到问题,可以参考。

1.2、筛选 L 列业务类型为:交易付款

此处可参考http://support.i-search.com.cn/article/1566306723522贴中的第七点
代码如下:

df1 = df.loc[df["业务类型"].str.contains("交易付款",na=False)]

2.1、后续淘宝数据中,遇到相同账号下的价格相加,求平均

此处可参考http://support.i-search.com.cn/article/1566306723522贴中的第二点
数据透视表,具体代码如下:

res1 = pd.pivot_table(df3, index=['银行订单号'], values=['银行订单号','总价'], aggfunc=[np.mean])
res2 = pd.pivot_table(df1, index=['银行订单号'], values=['银行订单号','总价'], aggfunc=[np.sum])

用数据透视表的好处,处理速度快,且有求和、求平均、求长度等方法。

3、再提取出支付数据与淘宝数据后,为了显示效果,结果如下图:

4、剩下就是支付数据与淘宝数据的比对了。客户要求是要显示出支付数据与淘宝数据的差异,淘宝数据与支付数据的差异。
因而我们先不急着比对。此处我们不用循环的方式,去找到相同订单号,再去比对差异。

4.1、此处我们用 merge, 对的,先通过订单号去连接两张生成的账单明细,生成结果如下:

可以看到上图中的两个 sheet,“中间表”与“中间表 2”,分别为:支付数据为左表,淘宝数据为左表。
merge 可以参考 http://support.i-search.com.cn/article/1566306723522第一点。
组件如下:

#df1,df2 分别对应支付数据明细与淘宝数据明细

4.2、merge 用法需注意:

a、首先要注意,索引列的数据格式要一致,由于源数据来源不同,可能存在格式上的差异,用之前,需统一一下格式。
如:其中一份数据中的每一单元格数据前后存在空格,尾部存在制表符。
此处,我们可以参考

http://support.i-search.com.cn/article/1566306723522’贴中的第十点。

b、还需要注意的一点,连接两表,索引列的表头要一致,因为他是通过相同的表头下相同的数去连接剩下的数的。

4.3、比对。
由于 merge 连接两表后,支付数据与淘宝数据在‘中间表’这个 sheet 上一一对应的,因而,我们可以参考http://support.i-search.com.cn/article/1566306723522 贴中的第三点。直接比对两列数据的差异。
代码如下:

result1=df.loc[df["支付金额"].isin(df["淘宝金额"])==False]

最终将差异下入差异表格,结果如下:

如此,分享就结束了,分享重点,如何将http://support.i-search.com.cn/article/1566306723522 贴中的处理 Excel 的一些方法,怎么用到项目上,或在什么样的场景下,可以用到什么样的方法。对于数据量较大,尽量的少用循环去比对,不管从效率上还是结果上都很好。如何不使用循环解决比对,可以参考下。

若有好的方法,望补充!!!