大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

栏目: 数据库 · 发布时间: 5年前

内容简介:每天抽点时间,写写文采飘逸的文章坚持个几年,成为称霸一方的大佬坚持就会成功吧~

每天抽点时间,写写文采飘逸的文章

坚持个几年,成为称霸一方的大佬

坚持就会成功吧~

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

最近碰到瓶颈了, 一直找不到好的运营公众号的方式(好想有人指导唉~,对了,橡皮擦有个100多人的小qun,缺划水,话痨管理...)

谁有啥经验呢

给评论两句,帮橡皮擦指个鹿

嘿嘿哈嘿~

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

上一篇,我们捣鼓了一下dataframe计算类的函数

这一篇,

我要开始给你嘚啵一下分组与 排序

这两个函数分类

你一定要学会,学会了

就深得pandas精髓了

先说排序

英文 sorted

好了,说完了,其他的自己感受吧

O(∩_∩)O哈哈~

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

开个玩笑

作为程序布道师,我是一定要讲明白的

看,那是 sorted

dataframe 里面,有两个排序的函数

一个叫做 sort_values ,还有一个也叫做 sort_values 额,不对,叫做 sort_index

见到名字

对于已经看过我6篇博客的你来说

瞬间你就知道它们是干啥的了

  • sort_index 按照索引排序
  • sort_values 按照值排序

那我们就先表一表sort_index

先准备一个基本的数据

代码写的好不好,全看你找的数据准不准

df = pd.DataFrame([[4,8,3],[5,6,1],[1,9,2]],columns=['boys','girls','aboys'],index=['class2','class1','class3'])

复制代码

打印出来,一看就能看到,这个栗子举得真棒

boys  girls  aboys
class2     4      8      3
class1     5      6      1
class3     1      9      2
复制代码

注意看,列索引的名字分别是 boys , girls , aboys 行索引的名字分别是 class2 , class1 , class3

顺序都是乱的哦~

下面,使用排序

df = pd.DataFrame([[4,8,3],[5,6,1],[1,9,2]],columns=['boys','girls','aboys'],index=['class2','class1','class3'])


print(df)
print(df.sort_index())
print(df.sort_index(axis=1))
print(df.sort_index(axis=0))

复制代码

噔噔噔~

看结果

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

看到了没,axis这个参数,又起到作用了哦~

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

当然,倒序也是比较容易的

就加一个 ascending =False 就OK啦

这么简单,就不演示了

sort_index 嘚啵完毕,就该 sort_values 出面了

这个函数,比上面多一个参数 by

演示走一波

df = pd.DataFrame([[4,8,3],[5,6,1],[1,9,2]],columns=['boys','girls','aboys'],index=['class2','class1','class3'])


print(df)
print(df.sort_values(by='boys'))
print(df.sort_values(by='girls'))

print(df.sort_values(by='class1',axis=1))
复制代码

继续上个小图,说明一下

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

当然,还可以指定多列,不过不推荐,你可以用下面的代码 微微一测,技术到手

print(df.sort_values(by=['boys','girls']))
复制代码

排序嘚啵完毕,下面开始分组

分组,组叫做 group

在pandas中,这个就属于比较高级的函数的

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

GroupBy

官网注释里面给了一句

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

注意看,他把by当成了可选参数,

呵呵,官网写错了

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

你必须要传递一个by或者level进去

也就是按照谁来分组

但是,问题又来了

你要分组,必须要有意义

什么意思?

比如,我们一直测试的数据

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

这个数据,请问,你需要分组

你需要怎么分组?

这个压根不需要分组的好吧

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

所以分组前,你必须要明确的看到

恩,这个数据,我需要分组,才能不拉不拉的做一些事情

于是乎,我开始分组

顺手就来

看数据

import pandas as pd

mydict = {
    'class_name':['class1','class1','class2','class2'],
    'student':[20,30,10,20]
}
df = pd.DataFrame(mydict)
print(df)
复制代码

唉,这个数据就比较好学习分组了

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

在某次,某次什么事件中,统计到的每个班的学生人数如下

我接下来,要知道class1班有多少,class2班有多少人

那需要按照班级名字分组啊 也就是 class_name

你看,分组概念出来了吧

print("*"*100)
print(df.groupby(by='class_name'))
复制代码

一瞅,结果

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

嘿嘿,果然看不懂

****************************************************************************************************
<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x000001CB1D07CE80>
复制代码

其实没啥了,是一个 DataFrameGroupBy 对象

分组之后,你需要在使用一个聚合或者计算类的函数

就OK的拉

比如,分组求和

print(df.groupby(by='class_name').sum())
------------------------------------------
            student
class_name         
class1           50
class2           30
复制代码

比如,分组求平均值

print(df.groupby(by='class_name').mean())
复制代码

比如,分组求那个啥?

print(df.groupby(by='class_name').count())
复制代码

还有那个啥

df.groupby(by='class_name').size()
复制代码

好了,来了一个小重点 small case

这两个乍一看,咦,结果一样唉

注意,细节,细节才能区分大佬与大菜鸟

print("*"*100)
print(type(df.groupby(by='class_name').size()))
print("*"*100)
print(type(df.groupby(by='class_name').count()))
复制代码

这两返回的类型都不同

****************************************************************************************************
<class 'pandas.core.series.Series'>
****************************************************************************************************
<class 'pandas.core.frame.DataFrame'>
复制代码

一个是Series,是个是DataFrame

在往深处研究

import pandas as pd

mydict = {
    'class_name':['class1','class1','class2','class2','class3','class4','class4'],
    'student':[20,30,10,20,5,None,12]
}
df = pd.DataFrame(mydict)
print(df)

print("*"*100)
print(df.groupby(by='class_name').size())
print("*"*100)
print(df.groupby(by='class_name').count())

复制代码

对比结果吧

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

拿出笔来,画重点

count不统计none值

漂亮,深得精髓

大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7

OK了,这篇博客到此结果喽

知道你没学会,学会你就是最聪明的

明天我们继续研究groupby的其他用法

到现在为止,简单的部分已经完事了

从NOW开始,剩下的都是难的了

哈哈哈哈


以上所述就是小编给大家介绍的《大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

快速转行做产品经理

快速转行做产品经理

李三科 / 华中科技大学出版社 / 2018-6-1 / 39.90

互联网已经进入以产品为中心的时代,不懂技术一样做高薪产品经理。本书将满足你转行、就业、加薪的愿望。 . 作者李三科,互联网资深产品经理。2011年离开传统销售行业进入互联网行业工作,从对产品经理的工作一无所知,到成长为一名年薪几十万的资深产品经理,他对产品经理职业有着深刻的理解,也积累了丰富的学习、工作经验。本书以作者亲身经历为线索,讲解学习产品经理相关知识和工作方法的经验,同时介绍求......一起来看看 《快速转行做产品经理》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具