Pandas学习笔记四

1. 透视表

1.1 pivot

一般状态下,数据在DataFrame会以压缩(stacked)状态存放,例如上面的Gender,两个类别被叠在一列中,pivot函数可将某一列作为新的cols
Pandas学习笔记四

1.2 pivot_table

Pandas学习笔记四
aggfunc:对组内进行聚合统计,可传入各类函数,默认为’mean’
Pandas学习笔记四
margins:汇总边际状态
Pandas学习笔记四
行、列、值都可以为多级
Pandas学习笔记四

1.3 crosstab(交叉表)

交叉表是一种特殊的透视表,典型的用途如分组统计,如现在想要统计关于街道和性别分组的频数:
Pandas学习笔记四
values和aggfunc:分组对某些数据进行聚合操作,这两个参数必须成对出现
Pandas学习笔记四
除了边际参数margins外,还引入了normalize参数,可选’all’,‘index’,'columns’参数值
Pandas学习笔记四

2. 其他变形方法

2.1 melt

melt函数可以认为是pivot函数的逆操作,将unstacked状态的数据,压缩成stacked,使“宽”的DataFrame变“窄”
Pandas学习笔记四
melt函数中的id_vars表示需要保留的列,value_vars表示需要stack的一组列
Pandas学习笔记四

2.2 压缩与展开

Pandas学习笔记四
Pandas学习笔记四
stack函数可以看做将横向的索引放到纵向,因此功能类似与melt,参数level可指定变化的列索引是哪一层(或哪几层,需要列表)
Pandas学习笔记四
unstack:stack的逆函数,功能上类似于pivot_table
Pandas学习笔记四

3. 哑变量与因子化

3.1 Dummy Variable(哑变量)

get_dummies函数,其功能主要是进行one-hot编码
Pandas学习笔记四

将上面的表格前两列转化为哑变量,并加入第三列Weight数值
Pandas学习笔记四

3.2 factorize方法

该方法主要用于自然数编码,并且缺失值会被记做-1,其中sort参数表示是否排序后赋值
Pandas学习笔记四

4. 问题与练习

4.1 问题

【问题一】 上面提到了许多变形函数,如melt/crosstab/pivot/pivot_table/stack/unstack函数,请总结它们各自的使用特点。

melt函数是pivot函数的逆操作。crosstab是一种特殊的透视表,可用于分组统计。unstack是stack的逆函数,功能上类似于pivot_table,用于数据压缩与展开。

【问题二】 变形函数和多级索引是什么关系?哪些变形函数会使得索引维数变化?具体如何变化?

变形函数在于对数据展现形式进行整理,多级索引用于提取符合条件的数据。

【问题三】 请举出一个除了上文提过的关于哑变量方法的例子。

不同的车辆品牌可以编码为不同的数字。

【问题四】 使用完stack后立即使用unstack一定能保证变化结果与原始表完全一致吗?

不一定

【问题五】 透视表中涉及了三个函数,请分别使用它们完成相同的目标(任务自定)并比较哪个速度最快。

【问题六】 既然melt起到了stack的功能,为什么再设计stack函数?

stack功能更强大,适用于多层索引下针对某层索引进行操作。

4.2 练习

【练习一】 继续使用上一章的药物数据集:

(a) 现在请你将数据表转化成如下形态,每行需要显示每种药物在每个地区的10年至17年的变化情况,且前三列需要排序:
Pandas学习笔记四
(b) 现在请将(a)中的结果恢复到原数据表,并通过equal函数检验初始表与新的结果是否一致(返回True)
Pandas学习笔记四
Pandas学习笔记四

【练习二】 现有一份关于某地区地震情况的数据集,请解决如下问题:
Pandas学习笔记四
(a) 现在请你将数据表转化成如下形态,将方向列展开,并将距离、深度和烈度三个属性压缩:
Pandas学习笔记四

(b) 现在请将(a)中的结果恢复到原数据表,并通过equal函数检验初始表与新的结果是否一致(返回True)
Pandas学习笔记四
Pandas学习笔记四

参考文章: Pandas教程.