工作中經常會用到對賬單,一般我們都是用Excel進行匯總,每次總是有大量的重復工作,很是煩人,今天我教大家用Python/ target=_blank class=infotextkey>Python一鍵生成對賬單,非常省事,再也不用加班加點了。
一、準備基礎數據
首先,我們用Excel創建三張基礎數據表,其中sheet1重新命名為客戶銷售明細表,sheet2預收款明細表,sheet3期初余額表。如圖:(我這里的三張表,都放在了我的電腦桌面上,一個叫賬戶平衡表.xlsx的Excel工作簿中,你也可以建三個工作簿分別存放,圖2、圖3、圖4中可看到我的基礎數據表,里面有三個sheet表,并已重命名,且每一張表都預輸入了客戶相關信息。)
圖1
圖2
圖3
圖4
二、要求
輸入客戶名稱,一鍵調出客戶銷售明細及賬戶余額等信息。
三、思路
由于數據分別存放在三張表上,所以我們最關鍵的步驟就是要合并三張表,然后寫搜索條件代碼即可。
四、寫代碼
1、導入pandas模塊
import pandas as pd
2、導入數據并處理空值
df1=pd.read_excel(r"C:UsersAdministratorDesktop賬戶平衡表.xlsx",sheet_name='客戶銷售明細')
df2=pd.read_excel(r"C:UsersAdministratorDesktop賬戶平衡表.xlsx",sheet_name='預收款')
df3=pd.read_excel(r"C:UsersAdministratorDesktop賬戶平衡表.xlsx",sheet_name='期初余額')
df1.fillna(0,inplace=True)
df2.fillna(0,inplace=True)
df3.fillna(0,inplace=True)
3、設置要查詢的變量
name='客戶名稱'
4、設置要查詢的字段
list1=['customer','product','單位','單價','發貨','調貨','退貨','實銷','運費']
list2=['customer','本期預收_玉米','本期預收_小麥']
list3=['customer','期初余額_玉米','期初余額_小麥']
df1=df1[list1]
df2=df2[list2]
df3=df3[list3]
5、分別對三個表進行分類匯總
表1
df1=df1.groupby(['customer','product','單價']).sum()
df1.reset_index('product',inplace=True,drop=False)
df1.reset_index(inplace=True)
df1=df1[df1['customer']==name]
df1.reset_index(inplace=True)
df1
del df1['index']
df1
效果如下圖:
表2
df2.groupby(['customer']).sum()
df2=df2[df2['customer']==name]
df2.reset_index(inplace=True,drop=False)
df2
del df2['index']
del df2['customer']
df2
表3
df3.groupby(['customer']).sum()
df3=df3[df3['customer']==name]
df3.reset_index(inplace=True,drop=False)
df3
del df3['index']
del df3['customer']
5、三表合并
df2=df1.merge(df2,left_index=True,right_index=True,how='left')
df3=df2.merge(df3,left_index=True,right_index=True,how='left')
df3
df3.fillna(0,inplace=True)
df3
效果如下:
6、對合并后的總表進行相關計算
df3['銷售額']=df3['實銷']*df3['單價']
df3['應收賬款_玉米']=df3['銷售額']-df3['運費']-df3['本期預收_玉米']+df3['期初余額_玉米']
df3['應收賬款_小麥']=df3['期初余額_小麥']-df3['本期預收_小麥']
df3['應收賬款']=df3['應收賬款_玉米']+df3['應收賬款_小麥']
df3.fillna(0,inplace=True)
df3
效果如下:
7、整理結果
order=['customer','product','發貨','調貨','退貨','實銷','單價','銷售額','運費','期初余額_玉米','本期預收_玉米','應收賬款_玉米','期初余額_小麥','本期預收_小麥','應收賬款_小麥','應收賬款']
df4=df3[order]
df4=pd.pivot_table(df4,index=['customer','product','單價'],aggfunc=sum,margins=True)
df4.reset_index(inplace=True)
df4=df4[order]
df4
對賬單結果:
關鍵步驟總結:
1、分別導入三個基礎表
2、分別匯總三個表,并按條件進行篩選
3、將三個符合條件的表合并
4、整理輸出結果
今天的文章至此結束,如有不妥,請在下方留言評論。歡迎點贊、收藏、關注和評論。