周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

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

内容简介:为啥一样啊,因为要肝的你看,学编程有很多好处掉头发,有借口吧 不洗头,有借口吧

为啥一样啊,因为要肝的

你看,学编程有很多好处

掉头发,有借口吧 不洗头,有借口吧

不洗袜子,有借口吧 不去看电影,有借口吧 不陪女朋友,有借口吧

活该单身, (❁´◡`❁) ✲゚

哈哈,唯独梦想橡皮擦,她就比较厉害了,

身边的大佬全是综上所述,嘿嘿嘿

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

学个pandas在不找点乐趣,咋学啊

大周一的,弄点啥?

遥记得,上一篇最后,我说要写groupby的高级函数

后来自己理了理,忽然觉得真难

不想了写了... ...

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

后来,转念一想,不行啊,我是大佬啊

咋能不写

于是乎,我就写了今天这篇博客

groupby 核心为 split-apply-combine

啥意思呢,就是字面意思呗

分割-应用-组合

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8
  • 分割,就是按照一些标准进行数据的拆分
  • 应用,给分好的组,应用一些函数上去
  • 组合,分组的数据,捣鼓捣鼓,弄成一个新的数据结构,方便后面应用

Over

这就是groupby的核心

分割,或者叫分组(拆分)步骤,是最简单的, 看好数据,写代码就可以了 (说的好像很容易似的)

使用最多的,对我们来说 是想要对数据进行一些基本的 应用

也就是分组之后,我们要计算

官方文档里面介绍groupby要实现的效果

就是想 模拟SQL 的操作

SQL是啥?数据库的那个脚本语言(你不会不会写吧,哈哈哈O(∩_∩)O哈哈~)

groupby在模仿的就是下面这句话

select col1,col2,count(col3),sum(col4) from one_table
group by col1,col2
复制代码

咦,如果你看到上面的 SQL 语句

发现,这个我熟悉啊

那么接下来,学习就easy了

当然,如果你不是很清楚 那就要看你的悟性了

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

将一个dataframe对象分割成组

其实这个咱上篇文章已经做过了

再学一次,没毛病

举个代码的例子

import pandas as pd
df = pd.DataFrame([('class1','boy',100),
                   ('class2', 'boy', 90),
                   ('class3', 'girl', 80),
                   ('class1', 'unkown', None),
                   ('class2', 'unkown', 90)],index=['dawa','erwa','sanwa','siwa','wuwa'],columns=['class','sex','weight'])

print(df)
复制代码

看着迷糊么? 我其实就是做了这么一个表格

咱去excel里面瞅瞅

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

pandas里面打印的无非是英文

class     sex  weight
dawa   class1     boy   100.0
erwa   class2     boy    90.0
sanwa  class3    girl    80.0
siwa   class1  unkown     NaN
wuwa   class2  unkown    90.0
复制代码

一样的,接下来,基本操作

走位,走位,瞬间清晰

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8
print(df.groupby('class'))
print(df.groupby('sex',axis='columns'))
print(df.groupby(['class','sex']))

复制代码

第一个,你肯定会 第二个,修改axis的轴,按照columns进行分组了,先不用管有没有意义哦 第三个,请注意,有两个列名在一个数组里面,叫做先按照class分组,在按照sex分组

那么groupby里面可以给哪些值呢?

难不成只有上面的三种

天真了吧

看操作

  1. 给一个 python 函数,可以作用于每一个目标轴标签上,不好理解
  2. list列表或者numpy的数组,长度和被选择的轴一致
  3. 字典或者Series,格式参照 label->group name
  4. 提供一个字符串,比如 df.groupby('A')df.groupby(df['A']) 是一样的
  5. 上面任意一条,构成的list列表

好了,难吧

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

没错,说了,从这篇博客开始就开始高级部分学习了

嘿嘿

简单的多列分组代码代码如下

df = pd.DataFrame({'A': ['girl', 'boy', 'girl', 'boy',
                         'girl', 'boy', 'girl', 'girl'],
                   'B': ['one', 'one', 'two', 'three',
                         'two', 'two', 'one', 'three'],
                   'C': [3,1,4,5,6,7,8,1],
                   'D': [9,1,2,3,1,6,4,3]})

print(df)

grouped = df.groupby('A')
print(grouped)
grouped = df.groupby(['A','B'])
print(grouped)

复制代码

对于一个待分组的dataframe对象来说 你可以直接用'A'或者'B'中的一个进行分组 当然也可以直接用['A','B']进行分组

这个要看你实际的需求了啊

分组之后,我们能干点啥?

当然是获取分组之后的数据啊

print(grouped.get_group('boy'))
print(grouped.get_group('girl'))
复制代码

小函数,送上一枚

get_group('key name')

除了获取分组之后的数据,在送你个常用小属性,瞅瞅

grouped = df.groupby('A')
print(grouped)
print(grouped.groups)
复制代码

groups这个属性非常常用哦~因为我们时常需要看一下,分组结果是否争取e

{'boy': Int64Index([1, 3, 5], dtype='int64'), 'girl': Int64Index([0, 2, 4, 6, 7], dtype='int64')}
复制代码

当然学习吗,你可以使用help和dir把帮助文档弹出来 然后所有的属性和方法都清晰可见了

print(dir(grouped))
print(help(grouped))
复制代码

到最后了,我在嘚啵一个知识点,这个知识点是series的

为什么又返回来,开始学习series了呢

还不是因为直接学习dataframe的多列分组,难度太大

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

我们先弄一个完美的测试栗子

arrays = [['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]


index = pd.MultiIndex.from_arrays(arrays=arrays,names=['first','second'])

s = pd.Series([3,1,4,1,5,9,2,6],index=index)

print(s)
复制代码

这个series长成这个样子

first  second
a      one       3
       two       1
b      one       4
       two       1
c      one       5
       two       9
d      one       2
       two       6
dtype: int64
复制代码

一定要看明白,是分级索引哦

接下来对它进行分组,并且求和

比如,我要计算first列下面的a的和,b的和,c的和,d的和

我们可以通过level参数控制

# 这两个一个意思
print(s.groupby(level=0))
print(s.groupby(level='first'))
复制代码
grouped = s.groupby(level=0)
print(grouped.sum())
复制代码

搞定,看看结果

没毛病

对于second列,我们也可以分组求和的哦

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8
grouped = s.groupby(level='second')
print(grouped.sum())
复制代码

咦,好像发现点问题

print("分组求和")
grouped = s.groupby(level='second')
print(grouped.sum())
print("sum函数求和")

print(s.sum(level='second'))

复制代码
周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

一样唉~

其实 参数level 也可以这么写呢 level=['first','second']

好了,今天肝不动了

明天我们继续吧

周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

引爆用户增长

引爆用户增长

黄天文 / 机械工业出版社 / 2017-11-1 / 79.00

本书是用户增长领域的开创性著作,是作者在去哪儿、360、百度等知名企业多年用户增长工作的经验总结。宏观层面,从战略高度构建了一套系统的、科学的用户增长方法论;微观层面,从战术执行细节上针对用户增长体系搭建、用户全生命周期运营等总结了大量能引爆用户增长的实操方法和技巧。 不仅有方法论和技巧,而且非常注重实操。对电商、团购、共享经济、互联网金融等4大行业的50余家企业(360、美团、滴滴等)的1......一起来看看 《引爆用户增长》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

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

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具