美文网首页
第五章 变形

第五章 变形

作者: 陈易男 | 来源:发表于2020-12-27 21:41 被阅读0次
整章知识结构

长宽表的变形

长宽表的变形
  • pivot

pivot变形的过程


ch5_pivot.png
ch5_mulpivot.png
  • pivot_table

pivot_table的变形依赖唯一性条件,当不能满足唯一性条件时,可以使用pivot_table,使用聚合操作使得相同行列组合对应的多个值变成一个值

df.pivot_table(index = 'Name',
               columns = 'Subject',
               values = 'Grade',
               aggfunc='mean',
               margins=True)
  • melt

pivot的逆操作


ch5_melt.png
  • wide_to_long

如果列中包含了交叉类别,比如期中期末的类别和语文数学的类别,那么想要把values_name对应的Grade扩充为两列分别对应语文分数和数学分数,只把期中期末的信息压缩,这种需求下就要使用wide_to_long函数来完成


ch5_wtl.png

索引的变形

索引的变形
  • unstack

把行索引变为列索引,主要参数是移动的层号,默认是最内层,同时支持转化多个层

df.unstack()
df.unstack(2)
df.unstack([0,2])

其他函数变形

其他函数变形
  • crosstable

crosstab并不是一个值得推荐使用的函数,因为它能实现的所有功能pivot_table都能完成,并且速度更快。在默认状态下,crosstab可以统计元素组合出现的频数。

【练一练】

前面提到了crosstab的性能劣于pivot_table,请选用多个聚合方法进行验证。

%timeit -n 500 pd.crosstab(index = df.School, columns = df.Transfer, values = [0]*df.shape[0], aggfunc = 'count')
%timeit -n 500 df.pivot_table(index = 'School',columns = 'Transfer',values = 'Name',aggfunc = 'count')
%timeit -n 500 pd.crosstab(index = df.School, columns = df.Transfer, values = df.Height, aggfunc = 'sum')
%timeit -n 500 df.pivot_table(index = 'School',columns = 'Transfer',values = 'Name',aggfunc = 'sum')
Running tme
  • explode

explode参数能够对某一列的元素进行纵向的展开,被展开的单元格必须存储list, tuple, Series, np.ndarray中的一种类型。

df_ex = pd.DataFrame({'A': [[1, 2], 'my_str', {1, 2}, pd.Series([3, 4])],
                      'B': 1})
df_ex
df_ex.explode('A')
before
after
  • get_dummies

特征构建的重要函数之一,用于把类别特征转为指示变量

pd.get_dummies(df.Grade).head()
output

练习

Ex1:美国非法药物数据集

现有一份关于美国非法药物的数据集,其中SubstanceName, DrugReports分别指药物名称和报告数量:

  1. 将数据转为如下的形式:


    Data
  2. 将第1问中的结果恢复为原表。

  3. State分别统计每年的报告数量总和,其中State, YYYY分别为列索引和行索引,要求分别使用pivot_table函数与groupby+unstack两种不同的策略实现,并体会它们之间的联系

# 使用pivot
df_op = df.pivot(index=['State','COUNTY','SubstanceName'], columns='YYYY', values='DrugReports').reset_index().rename_axis(columns={'YYYY':''})
df_op.head()
# 使用melt恢复为原表
df_op_melted = df_op.melt(id_vars = ['State','COUNTY','SubstanceName'],
                    value_vars = df_op.columns[3:],
                    var_name = 'YYYY',
                    value_name = 'DrugReports').dropna(subset=['DrugReports'])
# 使用pivot按state统计每年的和
df_op_melted.pivot_table(index = ['State'],
                  columns = 'YYYY',
                  values = 'DrugReports',
                  aggfunc = 'sum').head()
# 使用groupby+unstack实现
df_op_melted.groupby(['State', 'YYYY'])['DrugReports'].agg(['sum']).unstack()

Ex2:特殊的wide_to_long方法

从功能上看,melt方法应当属于wide_to_long的一种特殊情况,即stubnames只有一类。请使用wide_to_long生成melt一节中的df_melted。(提示:对列名增加适当的前缀)

df = df.rename(columns={'Chinese':'Grade_Chinese', 'Math':'Grade_Math'})
pd.wide_to_long(df,stubnames=['Grade'],
                i = ['Class', 'Name'],
                j='Subject',
                sep='_',
                suffix='.+').reset_index()

相关文章

  • DataWhale组队学习之变形

    第五章 变形参考datawhale:https://datawhalechina.github.io/joyful...

  • 第五章 变形

    长宽表的变形 pivot pivot变形的过程ch5_pivot.pngch5_mulpivot.png pivo...

  • MC世界秘史•创世之源(第五章)

    第五章 「变形者」与「心眼」.其一 “我把我自己的力量命名为「永恒之力」。”Notch身上散发出金光,浮动在空中。...

  • 封神宇宙(42-5)

    原创连载 序言及卷首链接目录 最终卷 继往开来 第五章 突入敌巢 率先直奔鹿台而来的两艘周军变形舰,属于刚刚击败罗...

  • 艺术的起源 学记(五)

    第五章 人体装饰 原始装饰,一半是固定的,一半是活动的我们。将一切永久的化装变形。例如:刺纹、穿鼻、穿...

  • 封神宇宙(30-5)

    原创连载 序言及卷首链接目录 第三十卷 金乌反攻 第五章 启明星光 胡升唯恐变形怪物再度实施自爆战术,命令全军团幸...

  • 一百万字的古怪笔记 (第五章 暴食)

    第五章 (暴食) 这一缕戾气飘在风中而不散,用手触摸并不会改变形态。我试着用金属圆环和丝线发生接触,预想中的...

  • css3-变形

    .css3-变形 transform 是css的变形属性,通过变形函数,设置具体的变形方式 scale()变形函数...

  • 变形,变形

    这里没有废话之先上效果图。 这里没有废话之思路描述 1.确定你需要的变化的形状2.确定这个形状需要的关键点3.连点...

  • 基坑变形观测四问2022-10-12

    1、基坑变形观测有哪些观测方式? 答:基坑变形观测分为基坑支护结构变形观测和基坑回弹变形观测。 2、变形测量发现异...

网友评论

      本文标题:第五章 变形

      本文链接:https://www.haomeiwen.com/subject/yvranktx.html