第四章-变形

四、问题与练习

1. 问题

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

  • pivot函数
    不能分组,index和columns不能完全相同,否则会报错
  • pivot_table函数
    (1)有分组功能,可以通过aggfunc参数对组内数据进行聚合统计,可传入各类函数,默认为mean
    (2)可以通过margins参数汇总边际状态,通过margins_name设置名字
    (3)行,列,值都可以为多级
  • crosstab函数
    支持分组,但不支持多级分组,可以通过normalize参数进行数据归一化,也可以汇总边际状态
  • melt函数
    相当于pivot函数的逆操作
  • stack函数
    可以将通过pivot_table函数压缩的数据展开成stack,参数level可指定变化的列索引是哪一层
  • unstack函数
    stack的逆函数,功能上类似于pivot_table()函数

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

可以通过设置变形函数的index,values参数来生成多级索引

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

第四章-变形_第1张图片

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

df_s = pd.pivot_table(df,index=['Class','ID'],columns='Gender',values=['Height','Weight'])

df_s.stack().unstack().equals(df_stacked)  # False

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

%timeit df.pivot(index='ID',columns='Gender',values='Height')
%timeit pd.pivot_table(df,index='ID',columns='Gender',values = "Height")
%timeit pd.crosstab(index=df['ID'],columns=df['Gender'])

在这里插入图片描述

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

stack函数的参数level可指定变化的列索引是哪一层

你可能感兴趣的:(第四章-变形)