开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:pandas 数据合并与整形 2】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15392
pandas 数据合并与整形 2
内容介绍:
一、Reordering and Sorting Levels
二、Summary Statistics by Level
三、Indexing with a DataFrame’s columns
一、Reordering and Sorting Levels
下面来看这个数据框数据的重排序和层级排序。
有时候需要在一个 axis (轴)上按层级进行排序,或者在一个层级上,根据值来进行排序。
可以用 swap level 这个函数,将两个层级进行交换,然后返回一个层级改变后的新对象(数据本身并不会改变)。
下面是列举的例子,
刚刚的数据框,使用了 swap level,level 等于就是层级的级别(第0级、第1级...),那么这例用 key1和 key2给它交换一下,然后执行观察结果。结果可以很明显的看出,key2到了最左边,变成第0级索引,key1变成第1级索引,交换两个乘积索引,原因是其重排列或者重排序。
然后,可以用 sort_index 函数。sort_index 则是在一个层级上,按数值进行排序,刚刚是定义了层级进行交换、互换,那么使用数据进行排序的话,可以用 sort_index 作用在具体的层级上。比如在交换层级的时候,通常也会使用 sort_index,来让结果按指示的层级进行排序。
下面是列举的例子,数据框编写的 sort_index 排序,按照 level=1,注意level是从0开始(第0级、第1级...),那么运行查看结果。它应该是按照 key2来排序,那 key2的数值是多少?原来的值是什么?因为上面离得太远,可以把 frame 填写到下方,然后运行,可以看到原来的 key2数值是1、2、1、2。但上面按照 key2(level=1),排完序后,排序结果 key2数值为1、1、2、2。
大家注意,如果按照列的 sort_index 进行排序,会导致其报错,列的情况拥有 color 和 state。这里观察排序,发现它会进行报错,也就是说 level 一般就在说明在行方面(指 key1和 key2),那么最左边就是 level=0,然后最右边就是 level=1,这里需要理解其含义。
下面再进行示例,sort_index (level=key2),这里直接使用名字,当然也可以用其数字代表着数字顺序,选择执行后可以看到已经按照 key2 排序了,接下来操作稍微复杂点,把 key1和 key2进行交换,然后再按照 key2排序。然后运行查看结果,看到 key1与 key2已经进行了调换,并且按照 key2排序。
这个就是层次索引的各种操作,然后实际上,如果按照习惯来进行排序的话,一般按照 key2排序比较多,后来直接是 sort_index。
二、Summary Statistics by Level
下面来学习,按照层级索引来做回答统计数据。那么可以在某个层级上进行数据的汇总,观察数据框,这里行上面是 key1和 key2这两个索引,列上面是 state 和 color 这两个索引,那么来进行汇总求和。
大家可以看到这这里出现 level=key2进行运行,可以看到 key2的内容,其原本的值就是1、2,那么按照 key2进行汇总的话,就是将key 汇总在一起,数值1汇总在一起,数值2汇总在一起。观察1的值,1的值为多少呢?上面出现 green 是0,出现数值为1,green 是6,所以相加数值为6。然后再看看 red,red 在上面值为1,在下面的数值是7,所以这里相加是8。同样的道理,所以大家需要了解其汇总的对应关系。
然后再来看看按照 color这个索引进行汇总,然后axis=1,这里注意行和列区分一下,运行观察结果,上面有 color、green、red,看一下 green 和 red 的数值,green 的值是0和2,所以相加结果也是2,red 只有一个数值为1,所以相加结果也是1,其它的仔细对照下。
三、Indexing with a DataFrame’s columns
然后再看第三个内容,可以用数据框的列来做索引,这是经常用到的,在实际数据里经常用列的名字来做索引,大家可以对应数据库,这里按照姓名做索引,按照编号做索引,按照日期做索引,一般都是列做索引,所以这个其实很正常。把 DataFrame 里的一列或多列作为行索引(row index)是一件很常见的事;另外,可能还希望把行索引变为列。
下面来看一下数据,这里构造数据框,然后这段给其定义为 a、b、c、d,然后定义后面的数据再进行运行。上面定义的为 a、b、c、d,然后下面这个行的索引,是默认的0到6,这是里面的数据。
然后来按照列来做索引,DataFrame 的 set_index 会把列作为索引,并创建一个新的 DataFrame。
这里用变量将其保存起来,代码为frame2 = frame.set_index(【‘c’;‘d’】),按照 c 和 d 做索引,那么 c 为第1索引,d 为第2索引,如果利用前面讲的层次索引、分层索引的话,就是第0级和第1级。这里进行运行,可以看到 c 和 d 的内容变成了索引的名字。
如果要保留原本的索引,可以使用 Drop = false,其默认是删除状态,因为使用 Drop = false,所以其 c 和 d 被保留下来,下图也许看起来可以更好的进行对比。另一方面,reset_index 的功能与 set_index 相反,它会把多层索引变成列,这里选择执行来观察还原情况。
大家理解所讲的内容,这就是层次索引、分层索引,这种功能就是在以前的基础上加深了内容。