python办公数据分析_python数据分析&办公自动化实战(四):数据聚合计算、表链接及透视表...

本篇是python数据分析实战笔记的第四篇,主要内容包括数据汇总处理、表与表之间连接及实现数据透视表,涉及groupby、merge、pivot_table及value_counts等值操作的函数,以代码+注释+总结形式展示。

任务目标:根据新签商家名单匹配商家损益情况

任务拆解:生成新签商家名单,根据商家名单与当月全量的商家损益表做关键字匹配,输出以特定维度汇总的经营结果

代码展示

df1 = pd.read_excel(doc1,encoding = "gbk")

df2 = pd.read_excel(doc2,encoding = "gbk")

df3 = pd.merge(df1,df2.loc[:,["月份","商家名称","省区","收入不含税"]],on=["月份","商家名称","省区"],how="left")

df3.groupby(["商家名称"]).sum().reset_index().to_excel("新签客户收入情况_11月.xlsx",encoding = "gbk")

df4 = pd.pivot_table(df3,values="收入不含税",columns="月份",index="省区",aggfunc="sum").reset_index()

代码拆解

首先,生成新签商家步骤暂未找到很好的实现方式,预想的方法是以当月商家名单对以往商家名单做循环判断,输出一个值为是否的矩阵,选取从未出现在以往商家明细中的名单;如果有哪位大佬通过代码实现了,请留言指教。

第二步是读取文件,见前文不赘述;

第三步是通过`merge`函数进行匹配,类似于数据库中建立表跟表之间的关系。

df3 = pd.merge(df1,df2.loc[:,["月份","商家名称","省区","收入不含税"]],on=["月份","商家名称","省区"],how="left")

`merge`为表合并函数,类似于数据库join操作;

on=关键字key,若字段不统一用`left_on&right_on`;

how为合并方式,与数据库通用,分left,right,inner,outer四种方式;左右相同,输出主表全部与从表与之匹配的部分;inner输出两表交集,outer输出并集,缺少数据的部分以空值填充;

`df2.loc[:,["a","b"]]`实现了只摘取特定列进行匹配,配合关键字可以实现不出现重复的列(如`月份_X,月份_y`)

第四步是汇总输出,使用`groupby()`函数实现汇总;

df3.groupby(["商家名称"]).sum().reset_index().to_excel("新签客户收入情况_11月.xlsx",encoding = "gbk")

#groupby 的用法为:groupby(以某列进行合并).值计算的方式

pandas中支持的值的计算方式包括:

- 加减乘除算术运算

- 是否逻辑判断

- sum() 求和 、count() 计数

- value_counts() 汇总计数

- max() 最大值、min() 最小值

- mean() 平均数、median() 中位数、mode() 众数

- var() 方差、std() 标准差

- quantile() 求四分位数,参数为0.25 或 0.75

本例中仅为按单个字段进行单一运算,`groupby()`还支持多种运算方式:

df.groupby(["月份","商家名称"])["收入"].sum()

#按月份、商家名称对收入列进行汇总求和

df.groupby(["月份","商家名称"]).aggregate({"子账号":"count","收入":"sum"})

#按月份、商家名称,对收入列进行汇总求和,对子账号进行汇总计数

另外,`groupby()`所得的结果并非标准的DataFrame形式,因此对于此类表需要重新设置索引`reset_index()`

关于`groupby()`更深层次的了解参见《python数据分析》的第十章。

第五步是制作数据透视表

df4 = pd.pivot_table(df3,values="收入不含税",columns="月份",index="省区",aggfunc="sum").reset_index()

"""pivot_table()的参数:

data,数据所在的表格;values,值;columns,列;index,行;aggfunc,对值的计算方式;

fill_value,对空值的填充方式,默认为None;margins,是否显示合计,True or False;margins_value,合计列的列名

dropna是否缺失,如果为真则把整行全作为缺失值删除;

"""

需要提及的是,pivot_table()输出的是二维表,与DataFrame中的一维表不同,其余操作与excel数据透视表基本相同,无法实现可视化操作但是数据读取速度更快,运行效率更高。工具无有高下之分,只有适用与否。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值