大家好,我是菜鸟小弟!数据是网上查到的销售数据。长这样:1、关联公式:VlookupVlookup几乎是excel中最常用的公式,一般用于两个表的关联查询。所以我先把这张表分成两张表。df1=sale[['订单明细编号','单据日期','区域名称','销售员','客户分类','库存代码','客户名称','销售员代码','库存名称','订单号','客户代码','部门名称','部门代码']]df2=sale[['订单明细编号','库存分类','税费','不含税金额','OrderAmount','Profit','UnitPrice','Quantity']]Demand:我想知道df1的每笔订单对应的利润。df2的表中存在profit列,所以想知道df1的每笔订单对应的利润。如果用excel,先确认orderdetailnumber是唯一值,然后在df1中新加一列写:=vlookup(a2,df2!a:h,6,0),然后往下拉就可以了没关系。(剩下的13个我就不写excel了)用python怎么实现?#查看订单明细号是否重复,结果为否。df1["订单详情编号"].duplicated().value_counts()df2["订单详情编号"].duplicated().value_counts()df_c=pd.merge(df1,df2,on="订单详情编号",how="left")2.数据透视表要求:想知道每个地区的业务员所赚取利润的总和和平均值。pd.pivot_table(sale,index="regionname",columns="salesmanname",values="profit",aggfunc=[np.sum,np.mean])3.比较两列的差异,因为每一列这张表中的数据维度不同,比较没有意义,所以我先在orderdetailnumber上做了个差异,然后再进行比较。需求:比较订单明细号和订单明细号2的差异并显示。sale["orderdetailnumber2"]=sale["orderdetailnumber"]#orderdetailnumber2前10条都是+1.sale["orderdetailnumber2"][1:10]=sale["订单明细编号2"][1:10]+1#差值输出result=sale.loc[sale["订单明细编号"].isin(sale["订单明细编号2"])==False]4.RemoveDuplicatevalue需求:去除salespersoncode的重复值sale.drop_duplicates("salespersoncode",inplace=True)5.缺失值处理首先查看销售数据的哪些列存在缺失值。#如果列中的行数小于索引中的行数,则存在缺失值。这里,客户姓名为329<335,说明存在缺失值。sale.info()要求:用0填充缺失值或者删除客户代码缺失值的行。事实上,缺失值处理的方法非常复杂。这里只介绍简单的处理方法。如果是数值变量,则使用最常用的均值、中位数或众数。对于更复杂的,可以使用随机森林模型根据其他维度进行预测。结果被填充。对于分类变量,根据业务逻辑填写更准确。比如这里的需求是填写客户名称的缺失值:可以按照存货类别中出现频率最高的存货对应的客户名称来填写。这里我们使用一个简单的解决方案:用0填充缺失值或者删除客户代码缺失值的行。#用0填充缺失值sale["customername"]=sale["customername"].fillna(0)#删除customercode缺失值的行sale.dropna(subset=["customercode"])6、多条件筛选需求:想知道业务员张艾在北京地区销售产品订单金额大于6000的信息sale.loc[(sale["区域名称"]=="北京")&(sale["销售员姓名"]=="张爱")&(sale["订单金额"]>5000)]VII.模糊筛选数据要求:筛选信息中包含“Samsung”或“Sony”的库存名称。sale.loc[sale["股票名称"].str.contains("Samsung|Sony")]8、需求分类汇总:北京地区每个销售员的利润总额。sale.groupby(["地区名","销售员名"])["利润"].sum()9.条件计算要求:存货名包含"Samsung"且税金高于1000的订单有多少?这些订单的总和和平均利润是多少?(或最小值、最大值、四分位数、标签差值)sale.loc[sale["股票名称"].str.contains("三星")&(sale["tax"]>=1000)][["订单DetailNumber","Profit"]].describe()10.删除数据之间的空格要求:删除存货名称两边的空格。sale["股票名称"].map(lambdas:s.strip(""))11、数据排序要求:按日期时间排序。sale=pd.merge(sale,pd.DataFrame(sale["文档日期"].str.split("",expand=True)),how="inner",left_index=True,right_index=True)XII.异常值替换首先使用describe()函数简单检查数据是否存在异常值。#可以看出销项税有负数,一般不会出现这种情况,视为异常值。sale.describe()要求:用0替换异常值。sale["OrderAmount"]=sale["OrderAmount"].replace(min(sale["OrderAmount"]),0)13.分组要求:根据利润数据的分布,地区分为:“差”、“中”、“较好”、“很好”首先当然是看利润的数据分布,这里我们用四分位数来判断。sale.groupby("RegionName")["Profit"].sum().describe()将总利润为[-9,7091]的区域按照四分位数分组为“差”,(7091,10952]区间被归类为“中”(10952,17656]被归类为好,(17656,37556]被归类为非常好。#首先创建一个Dataframesale_area=pd.DataFrame(sale.groupby("regionname")["profit"].sum()).reset_index()#设置bins,以及groupnamebins=[-10,7091,10952,17656,37556]groups=["poor","medium","better","verygood"]#usecutgrouping#sale_area["grouping"]=pd.cut(sale_area["profit"],bins,labels=groups)十四、根据业务逻辑定义标签要求:如果销售利润率(即利润/订单金额)大于30%,则标记为优质产品,如果小于5%,它是一般产品。sale.loc[(sale["profit"]/sale["orderamount"])>0.3,"label"]="精品"sale.loc[(sale["profit"]/sale["orderamount"])<0.05,"label"]="Generalcommodity"其实excel中有很多常用的操作。我列出了其中14个我比较常用的。如果大家还想实现其他操作,可以一起评论讨论。知道自己写python不够精简,就惯用loc。(其实查询会更精简)。如果大家有更好的写这些操作的方法,请务必评论告诉我,谢谢!最后我想说的是,我觉得excel和python最好不要比较,而是研究哪个好用。事实上,它们都是工具。excel作为最广泛的数据处理工具,被垄断了这么多年,在数据处理的便利性上肯定是优秀的。有些操作在python中确实更简单,但是excel操作也有很多比python更简单。比如一个很简单的操作:对每一列求和,显示在最下面一行。Excel就是给某列加一个sum()函数,然后往左拖就可以解决了。python需要定义一个函数(因为python需要判断格式,如果不是数值型数据,直接报错。)
