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

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

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

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

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

坚持就会成功吧~

大周末的不休息,继续学习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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Defensive Design for the Web

Defensive Design for the Web

37signals、Matthew Linderman、Jason Fried / New Riders / 2004-3-2 / GBP 18.99

Let's admit it: Things will go wrong online. No matter how carefully you design a site, no matter how much testing you do, customers still encounter problems. So how do you handle these inevitable bre......一起来看看 《Defensive Design for the Web》 这本书的介绍吧!

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

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具