Pandas 【Chapter 5】

长宽表的变形

Pivot

pivot 是一种典型的长表变宽表的函数
对于一个基本的长变宽的操作而言,最重要的有三个要素,分别是变形后的行索引、需要转到列索引的列,以及这些列和行索引对应的数值,它们分别对应了 pivot 方法中的 index, columns, values 参数。新生成表的列索引是 columns 对应列的 unique 值,而新表的行索引是 index 对应列的 unique 值,而 values 对应了想要展示的数值列。

  • 利用 pivot 进行变形操作需要满足唯一性的要求,即由于在新表中的行列索引对应了唯一的 value ,因此原表中的 index 和 columns 对应两个列的行组合必须唯一。
    [图片上传失败...(image-873c4b-1609060176874)]
    '''
    pivot_multi = df.pivot(index = ['Class', 'Name'],
    ....: columns = ['Subject','Examination'],
    ....: values = ['Grade','rank'])
    '''

pivot_table

pivot 的使用依赖于唯一性条件,那如果不满足唯一性条件,那么必须通过聚合操作使得相同行列组合对应的多个值变为一个值。

df.pivot_table(index = 'Name',
   ....:                columns = 'Subject',
   ....:                values = 'Grade',
   ....:                aggfunc = 'mean')

练一练

前提是所有列的类型一样?才会能求边际汇总?

melt

通过相应的逆操作把宽表转为长表

In [22]: df_melted = df.melt(id_vars = ['Class', 'Name'],
   ....:                     value_vars = ['Chinese', 'Math'],
   ....:                     var_name = 'Subject',
   ....:                     value_name = 'Grade')
  • 第一个参数自然是要处理的数据集。
  • id_vars是指普通列的列名,这些列的内容就不会被转换。
  • value_vars是指那些需要转换的列名,如果剩下的列全部都要转换,就可以不用写了。
    *(问题来了:如果某些列没有包含在id_vars和value_vars中会怎么样呢? 答:这些列的内容会被忽略)
  • var_name和value_name是设置对应的列名。

wide_to_long

melt 方法中,在列索引中被压缩的一组值对应的列元素只能代表同一层次的含义,即 values_name 。现在如果列中包含了交叉类别,比如期中期末的类别和语文数学的类别,那么想要把 values_name 对应的 Grade 扩充为两列分别对应语文分数和数学分数,只把期中期末的信息压缩,这种需求下就要使用 wide_to_long 函数来完成。


image.png

stack与unstack

unstack 函数的作用是把行索引转为列索引
unstack 的主要参数是移动的层号,默认转化最内层,移动到列索引的最内层,同时支持同时转化多个层
类似于 pivot 中的唯一性要求,在 unstack 中必须保证 被转为列索引的行索引层 和 被保留的行索引层 构成的组合是唯一的
与 unstack 相反, stack 的作用就是把列索引的层压入行索引,其用法完全类似。

其他变形函数

  • crosstab 能实现的所有功能 pivot_table 都能完成,并且速度更快。在默认状态下, crosstab 可以统计元素组合出现的频数,即 count 操作。
  • explode 参数能够对某一列的元素进行纵向的展开,被展开的单元格必须存储 list, tuple, Series, np.ndarray 中的一种类型
  • get_dummies
    get_dummies 是用于特征构建的重要函数之一,其作用是把类别特征转为指示变量。例如,对年级一列转为指示变量,属于某一个年级的对应列标记为1,否则为0

你可能感兴趣的:(Pandas 【Chapter 5】)