如果图片无法观看,请移步 https://blog.csdn.net/hihell

周三了,一个星期最难的一天

大中间的,今天还这么热

5月份,36度的高温

天空飘过几个字

屋里学pandas最得劲

Groupy DataFrame with Index Levels and Columns

说白了就是通过index和columns混合分组

例子走起,(不赶紧写例子,都不知道要怎么解释啦)

import pandas as pd

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] index = pd.MultiIndex.from_arrays(arrays=arrays,names=['first','second']) df = pd.DataFrame({'A':[3,1,4,5,9,2,6,1],
'B':[1,1,1,1,2,2,3,3]},index=index) print(df)

有例子,就有例子展示,对吧

              A  B
first second
bar one 3 1
two 1 1
baz one 4 1
two 5 1
foo one 9 2
two 2 2
qux one 6 3
two 1 3

接下来,大招展示的环节的

我要按照second的index索引和B列进行分组

代码先行一步,效果稍后就来

grouped = df.groupby([pd.Grouper(level=1),'B']).sum()
print(grouped)

注意看到groupby里面有两个值,一个是pd.Grouper(level=1) 这个为second的index

第二个为B columns



手太抖了,没画好,灵魂画手

主要就是为了让你看明白,分组是怎么计算的哦~

当然,你也可以通过index的名字进行分组

df.groupby([pd.Grouper(level='second'), 'A']).sum()

和上面的效果是一样一样的

甚至,我们可以直接简写成

df.groupby(['second', 'A']).sum()

分组之后的数据可以选择部分,也可以迭代

这个部分,其实我们已经实现过了

再拿出来,重温一下

df = pd.DataFrame({'A':['bar', 'bar', 'foo', 'foo', 'foo', 'foo', 'foo'],
'B':['one', 'two', 'one', 'two', 'one', 'two', 'three'],
'C':[3,1,4,5,9,2,6],
'D':[1,1,1,1,2,2,3]}) print(df) grouped = df.groupby('A') for name,group in grouped:
print(name)
print(group)

看到分组的名字分别是bar和foo,熟悉吧,常规操作

迭代的时候,用for in 循环即可

bar
A B C D
0 bar one 3 1
1 bar two 1 1
foo
A B C D
2 foo one 4 1
3 foo two 5 1
4 foo one 9 2
5 foo two 2 2
6 foo three 6 3

如果按照多keys分组,例如groupby(['A','B'])

它会自然而然的形成一个元组name



可以迭代,就可以部分选择,上篇博客有哦!

bars = grouped.get_group('bar') # 通过分组的名字
print(bars)

另一个呢?

df.groupby(['A', 'B']).get_group(('bar', 'one'))

唉,对喽,这么写,就比较对了

难度系数的大了,要来了,聚合函数

首先看一下内置的聚合函数

sum(), mean(), max(), min(), count(), size(), describe()

竟然才这么几个,那是因为我没写全

这个咱们已经操作很多次了

接下来可以看一个高级一些的

可自定义函数,传入agg方法中

我们还是通过刚才的数据进行分析

 	A      B  C  D
0 bar one 3 1
1 bar two 1 1
2 foo one 4 1
3 foo two 5 1
4 foo one 9 2
5 foo two 2 2
6 foo three 6 3

按照A和B进行分组

A有2个值,B有3个值,所以分组之后形成5组

看清楚,不要眨眼,操作来了

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



思路转换,单列求平均值

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

继续思路转换,给单列多个聚合函数

print(grouped['C'].agg(['mean','sum']))

很厉害,学到了吧

继续来,不要怕,求多种聚合运算的同时更改列名

print(grouped['C'].agg([('A','mean'),('B','max')]))

不同的列运用不同的聚合函数

print(grouped.agg({'C':['sum','mean'],'D':['min','max']}))

这些都是agg干的,我还可以继续编哦~

groupby中,可以修改成无索引形式

注意核心加了一个参数as_index=False


grouped = df.groupby(['A','B'],as_index=False) print(grouped.agg({'C':['sum','mean'],'D':['min','max']}))

最后一个操作,agg里面是可以使用自定义的聚合函数

一般,都是这个案例,我呢,当然不能例外啦

grouped = df.groupby('A')

def max_min(group):
return group.max()-group.min() print(grouped.agg(max_min))

agg(自定义的函数)

这个地方的自定义函数,还支持lambda的哦~

迷糊了吧,迷糊也没事,拿的住手机就行

拍这里,拍这个里

破周三,前不着村后不着店的,只好学pandas了,你该这么学,No.9的更多相关文章

  1. 风物长宜放眼量,人间正道是沧桑 - 一位北美 IT 技术人破局

    引言 我对于本科时光的印象,还停留在那所普通 211 大学的建筑物之间,我坐在大学的时光长廊里,满眼望去,都是经历的过的故事.可毕业后回首,却很少有人能说,自己从来没有迷茫过.迷茫,仿佛就是一团乌云, ...

  2. 知乎:在卡内基梅隆大学 (Carnegie Mellon University) 就读是怎样一番体验?

    转自:http://www.zhihu.com/question/24295398   知乎 Yu Zhang 知乎搜索 首页 话题 发现 消息 调查类问题名校就读体验修改 在卡内基梅隆大学 (Car ...

  3. 从CVPR 2014看计算机视觉领域的最新热点

    编者按:2014年度计算机视觉方向的顶级会议CVPR上月落下帷幕.在这次大会中,微软亚洲研究院共有15篇论文入选.今年的CVPR上有哪些让人眼前一亮的研究,又反映出哪些趋势?来听赴美参加会议的微软亚洲 ...

  4. 从CVPR 2014看计算机视觉领域的最新热点

    2014看计算机视觉领域的最新热点" title="从CVPR 2014看计算机视觉领域的最新热点"> 编者按:2014年度计算机视觉方向的顶级会议CVPR上月落下 ...

  5. ajax post提交form表单 报400错误 解决方法

    昨天晚上做项目遇到了一个奇怪的问题,我用ajax提交一个form表单,后台Java方法用的是一个实体接,但是他根本不进方法体中,直接给我一个400的错误,一开始我以为是我路径的问题(尴尬),结果直接访 ...

  6. 100+诡异的数据集,20万Eclipse Bug、死囚遗言等

    摘要:近日,Robert Seaton整理了100多个最有趣的数据集,其中包括Jeopardy真题,死囚的最后一句话,20万个Eclipse Bug,足球比赛相关,柏拉图式的爱情,太阳系以外的行星,1 ...

  7. OpenJudge 7627 鸡蛋的硬度

    描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参赛者是来自世 界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法- ...

  8. 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载

    人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载 ImageNet挑战赛中超越人类的计算机视觉系统微软亚洲研究院视觉计算组基于深度卷积神经网络(CNN)的计 ...

  9. COJN 0585 800604鸡蛋的硬度

    800604鸡蛋的硬度 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参 ...

随机推荐

  1. 牛客练习赛51 D题

    链接:https://ac.nowcoder.com/acm/contest/1083/D来源:牛客网 有一个草原可以用一个1~400的数轴表示.有n头羊和q个查询.每头羊的编号分别是1,2,3…n. ...

  2. 数值(Number,Math, 运算符)

    1.js中数字 1.数字存储 Javascript中所有数字的存储都是64位浮点数.整数也一样. 1 === 1.0 // true 2. 数字大小范围 可以表示的最大正数和最小负数 (-Math.p ...

  3. 富文本编辑器粘贴word内容

    很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...

  4. mkswap/swapon/swapoff/free

    free mkswap 创建Linux交换分区 swapon 启用交换分区 swapoff 关闭交换分区 注意: 在创建完交换区之后.是需要激活才能使用的 swapon/swapoff

  5. python 获取主机名称和ip地址

    python2.7 #!/usr/bin/env python # Python Network Programming Cookbook -- Chapter - # This program is ...

  6. JavaWeb_(Mybatis框架)关联查询_六

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  7. JavaWeb_(Mybatis框架)主配置文件介绍_四

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  8. onselectstart与onselect—禁止选择或禁止复制

    这两个事件看起来很相似,事实上却非常的不同. onselectstart 使用js禁止用户选中网页上的内容,IE及Chrome下的方法一样.使用onselectstart,例如 IE: <bod ...

  9. 冲刺阶段——Day4

    [今日内容] 完成对登陆成功后输入数据界面的设计,以及对Jswing组件功能的正确使用 布局类代码(布局部分是该类其中的一个部分,下述代码没有构成完整的类) public class NewGold ...

  10. 20190710记录:去掉中转图,直接以1280*1024进行反坐标计算,填补pbFinal。

    1.记录:去掉中转图,直接以1280*1024进行反坐标计算.pbFinal=1280*1024. // Imagejoint.cpp : 定义控制台应用程序的入口点. // #include &qu ...