pandas的merge和mysql的join用法基本一致,与之类似,pandas有个group by的方法与mysql的group by用法一致。
一、Group by是什么
百度百科的定义是
GroupBy语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。
我的理解,mysql的对象是一张行列的二维表,pandas的DataFrame其实也是一张行列二维表。
那么,Group by其实就是对于二维表的某一些列(by的对象,可以是1个或多个),执行一个聚合操作(group的运算)。
比如有一张表,每一行代表一个学生,有学号、姓名、性别、成绩4列。可以对性别进行聚合,计算男生、女生分别有多少人,平均成绩多少,最高最低分等。
手里的电脑没有配置python环境,稍后补充代码示例~~~
二、代码示例
文档说明
“group by” 指的是涵盖下列一项或多项步骤的处理流程:
分割:按条件把数据分割成多组;
应用:为每组单独应用函数;
组合:将处理结果组合成一个数据结构。
代码示例
创建示例数
In [91]: df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
....: 'foo', 'bar', 'foo', 'foo'],
....: 'B': ['one', 'one', 'two', 'three',
....: 'two', 'two', 'one', 'three'],
....: 'C': np.random.randn(8),
....: 'D': np.random.randn(8)})
....:
In [92]: df
Out[92]:
A B C D
0 foo one -1.202872 -0.055224
1 bar one -1.814470 2.395985
2 foo two 1.018601 1.552825
3 bar three -0.595447 0.166599
4 foo two 1.395433 0.047609
5 bar two -0.392670 -0.136473
6 foo one 0.007207 -0.561757
7 foo three 1.928123 -1.623033
对一列进行聚合
In [93]: df.groupby('A').sum()
Out[93]:
C D
A
bar -2.802588 2.42611
foo 3.146492 -0.63958
对多列进行聚合
In [94]: df.groupby(['A', 'B']).sum()
Out[94]:
C D
A B
bar one -1.814470 2.395985
three -0.595447 0.166599
two -0.392670 -0.136473
foo one -1.195665 -0.616981
three 1.928123 -1.623033
two 2.414034 1.600434
未完待续~~~