Pandas数据分析 ——Task04:变形

教程地址:joyful-pandas/第4章 变形——datawhalechina

Pandas变形

  • 四、问题与练习

四、问题与练习

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

  1. pivot函数
    pivot函数可将某一列作为新的cols
    但不允许values中出现重复的行列索引对
  2. pivot_table函数
    有分组功能
    可以通过aggfunc参数对组内数据进行聚合统计,可传入各类函数
    可以通过margins参数汇总边际状态
    行,列,值都可以为多级
    但是速度上比不上原来的pivot函数
  3. crosstab函数
    支持分组,可用于分组统计,但不支持多级分组
    可以通过normalize参数进行数据归一化,也可以汇总边际状态
  4. melt函数
    相当于pivot函数的逆操作,将unstacked状态的数据,压缩成stacked
  5. stack函数
    可看做将横向的索引放到纵向,将通过pivot_table函数压缩的数据展开成stack,参数level可指定变化的列索引是哪一层
  6. unstack函数
    stack的逆函数,功能上类似于pivot_table()函数

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

  1. 可以通过设置变形函数的index和values参数来生成多级索引
  2. stack,unstack

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

df_dd = pd.get_dummies(df[['School','Address']]).join(df['Physics'])
print(df_dd.head())

结果

      School_S_1  School_S_2  ...  Address_street_7  Physics
ID                            ...                           
1101           1           0  ...                 0       A+
1102           1           0  ...                 0       B+
1103           1           0  ...                 0       B+
1104           1           0  ...                 0       B-
1105           1           0  ...                 0       B+

[5 rows x 9 columns]

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

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

df.pivot(index='ID',columns='Class')
pd.pivot_table(df,index='ID',columns='Class')
pd.crosstab(index=df['ID'],columns=df['Class'])

结果:

pivot: 0.02886176109313965 s
pivot_table: 0.044981956481933594 s
crosstab: 0.03425192832946777 s

【问题六】 既然melt起到了stack的功能,为什么再设计stack函数?
stack函数的参数level可指定变化的列索引是哪一层,dropna用于去掉缺失数据

  1. 练习
    【练习一】 继续使用上一章的药物数据集:
    (a) 现在请你将数据表转化成如下形态,每行需要显示每种药物在每个地区的10年至17年的变化情况,且前三列需要排序:
    Pandas数据分析 ——Task04:变形_第1张图片
    (b) 现在请将(a)中的结果恢复到原数据表,并通过equal函数检验初始表与新的结果是否一致(返回True)

【练习二】 现有一份关于某地区地震情况的数据集,请解决如下问题:

(a) 现在请你将数据表转化成如下形态,将方向列展开,并将距离、深度和烈度三个属性压缩:
Pandas数据分析 ——Task04:变形_第2张图片

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

你可能感兴趣的:(pandas,python,数据分析)