1、MySQL和Pandas做分组聚合的对比说明
1)都是用来处理表格数据
不管是mysql,还是pandas,都是处理像excel那样的二维表格数据的。对于一个二维表,每一行都可以看作是一条记录,每一列都可以看作是字段。
2)分组聚合的风格不同
学过mysql的人都知道,mysql在做数据处理和统计分析的时候,有一个很大的痛点:语法顺序和执行顺序不一致,这就导致很多初学者很容易写错sql语句。
业界处理像excel那样的二维表格数据,通常有如下两种风格:
DSL风格:使用面向对象的方式来操作,pandas就是采用这种方式,通俗说就是“语法顺序和执行顺序一致”。
SQL风格:写sql语句来处理。
3)从代码角度,说明两者的不同
① mysql
语法顺序:
SELECT Column1, Column2, mean(Column3), sum(Column4) FROM SomeTable WHERE Condition 1 GROUP BY Column1, Column2 HAVING Condition2
逻辑执行顺序:
from...where...group...select...having...limit
② pandas
语法顺序和逻辑执行顺序:
df[Condition1].groupby([Column1,Column2],as_index=False).agg({Column3: "mean",Column4:"sum"})
③ 图示说明
首先from相当于取出MySQL中的一张表,对比pandas就是得到了一个df表对象。
然后就是执行where筛选,对比pandas就相当于写一个condition1过滤条件,做一个分组前的筛选筛选。
接着就是执行group分组条件,对比pandas就是写一个groupby条件进行分组。
再接着就是执行select条件,聚合函数就是写在select后面的,对比pandas就是执行agg()函数,在其中针对不同的列执行count、max、min、sum、mean聚合函数。
最后执行的是having表示分组后的筛选,在pandas中,通过上图可以发现我们得到了一个df1对象,针对这个df1对象,我们再做一次筛选,也表示分组后的筛选。
综上所述:只要你的逻辑想好了,在pandas中,由于语法顺序和逻辑执行顺序是一致的,你就按照逻辑顺序写下去,就很容易了。
4)用一个例子讲述MySQL和Pandas分组聚合
① 求不同deptno(部门)下,sal(工资)大于8000的部门、工资;
② mysqi中代码执行如下
select deptno,sum(sal) sums from emp group by deptno having sums > 9000;
结果如下:
③ pandas中代码执行如下
df = pd.read_excel(r"C:\Users\黄伟\Desktop\emp.xlsx") display(df) df = df.groupby("deptno",as_index=False).agg({"sal":"sum"}) display(df) df1 = df[df["sal"]>9000] display(df1)
结果如下: