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