这些祝福和干货比那几块钱的红包重要的多!
点击“数据管道”关注我们
祝各位
家人身体健康。
老友都在,猪事顺利。
单身狗的祝暗恋的女神、男神每天都给你早晚安
已有狗的祝你和你的狗永远美滋滋,早生贵子!
赚钱、赚很多钱、无论是人民币还是美刀。
各种牛皮,开挂,就是走位贼6的那种。
前戏
在利用pandas做数据分析的时候,经常会利用mean,sum,median等统计量对数据做整体的初步分析,但简单的累计方法只可以对数据集有一个粗略的认识, 有时候经常还需要对某些标签或索引的局部进行累计分析, 这时就需要用到groupby 了。
Groupby
通用步骤:
分割(Splitting),将DataFrame按照指定的键分割成若干组。
应用(Apply),对每个组应用函数。
组合(Combining),将每一组的结果合并成一个输出数组。
说明:在许多情况下,将数据分割成多个集合,并对每个子集应用(Apply)一些功能。在apply功能中,我们可以执行以下操作:
Aggregate ,计算一些统计量。
Transform,执行一些特定于组的操作。
Filter,按一些条件过滤掉不要的数据。
Apply,在每组上应用任意方法。
图解Groupby:
注:图片来源于《Python数据科学手册》。
Python代码案例:(所有代码按顺序阅读)
1导入数据并简单查看统计量
2查看数据groupby返回的对象
爱德宝器带你划重点:
这里的返回值不是一DataFrame 对象, 而是一个 DataFrameGroupBy 对象,可以将它看成是一种特殊形式的 DataFrame, 里面隐藏着若干组数据, 但是在没有应用累计函数之前不会计算 。在大多数场景中, 你可以将它看成是 DataFrame 的集合 。
3查看分组对象,迭代分组并选择其中一组
3-1:查看分组对象
3-2:迭代分组
输出:
3-3:选择其中某一组
4对groupby之后的对象分别进行Aggregate
Transform、Filter、Apply
4-1:对分组进行aggregate
4-2:对分组进行Tranform
宝器带你画重点:aggregate操作返回的是对组内全量数据缩减过的结果, 而转换操作会返回一个新的全量数据。 数据经过转换之后, 其形状与原来的输入数据是一样的。 常见的例子就是将每一组的样本数据减去各组的均值, 实现数据标准化。
4-3:对分组进行Filter
4-4:对分组进行apply
宝器带你画重点:GroupBy 里的 apply() 方法非常灵活, 唯一需要注意的地方是它总是输入分组数据的 DataFrame, 返回 Pandas 对象或标量
说明:
GroupBy对象可以直接转换为字典和列表
分组方式有很多种,可以按行、列、数据类型、字典、自定义函数等
数据透视表
数据透视表(pivot table) 是一种类似的操作方法 ,可以用来探索数据集内部的关联性的 ,数据透视表将每一列数据作为输入, 输出将数据不断细分成多个维度累计信息的二维数据表 。相比于GroupBy 操作,数据透视表更像是一种多维的 GroupBy 累计操作 。
Example:有一份泰坦尼克号获救数据,假如你想要同时观察不同性别与船舱等级的生还情况 。
1利用groupby实现:
2利用数据透视表实现
结论:利用数据透视表很容易看出不同性别,不同船票等级的生还情况。对比于groupby用法有以下优点:
可读性越强
更容易理解
参数详解:
data:Dataframe
values:待聚合的列的名称,默认是所有的数值列
index:用于分组的列名或其他分组键,出现在结果透视表的行
columns:用于分组的列名或其他分组键,出现在结果透视表的列
aggfunc:聚合函数或函数列表,默认为‘mean’。可以使任何对groupby有效的函数
fill_value:用于替换结果表中的缺失值
dropna:boolean,默认为True。删除缺失值
margins_name:string,默认为‘ALL’,当参数margins为True时,ALL行和列的名字
说明:
可以做多级数据透视表
可以通过字典为不同的列指定不同的累计函数
其他骚操作
参考:
https://www.ttorialspoint.com/python_pandas/python_pandas_groupby.htm
《Python数据科学手册》
后记:三十晚上边看春晚,边写公号(大概吃饱了想消化一下)。愿爱德宝器今年可以写很多干货、资源(本节代码在群资料)。不行了,老头子开始在催了,不多比比。创作不易,喜欢的朋友点个好看安排一下。
长按下方二维码关注我们
不断升华自己的过程中
你我一起进步