破周三,前不着村后不着店的,只好学pandas了,你该这么学,No.9
如果图片无法观看,请移步 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的更多相关文章
- 风物长宜放眼量,人间正道是沧桑 - 一位北美 IT 技术人破局
引言 我对于本科时光的印象,还停留在那所普通 211 大学的建筑物之间,我坐在大学的时光长廊里,满眼望去,都是经历的过的故事.可毕业后回首,却很少有人能说,自己从来没有迷茫过.迷茫,仿佛就是一团乌云, ...
- 知乎:在卡内基梅隆大学 (Carnegie Mellon University) 就读是怎样一番体验?
转自:http://www.zhihu.com/question/24295398 知乎 Yu Zhang 知乎搜索 首页 话题 发现 消息 调查类问题名校就读体验修改 在卡内基梅隆大学 (Car ...
- 从CVPR 2014看计算机视觉领域的最新热点
编者按:2014年度计算机视觉方向的顶级会议CVPR上月落下帷幕.在这次大会中,微软亚洲研究院共有15篇论文入选.今年的CVPR上有哪些让人眼前一亮的研究,又反映出哪些趋势?来听赴美参加会议的微软亚洲 ...
- 从CVPR 2014看计算机视觉领域的最新热点
2014看计算机视觉领域的最新热点" title="从CVPR 2014看计算机视觉领域的最新热点"> 编者按:2014年度计算机视觉方向的顶级会议CVPR上月落下 ...
- ajax post提交form表单 报400错误 解决方法
昨天晚上做项目遇到了一个奇怪的问题,我用ajax提交一个form表单,后台Java方法用的是一个实体接,但是他根本不进方法体中,直接给我一个400的错误,一开始我以为是我路径的问题(尴尬),结果直接访 ...
- 100+诡异的数据集,20万Eclipse Bug、死囚遗言等
摘要:近日,Robert Seaton整理了100多个最有趣的数据集,其中包括Jeopardy真题,死囚的最后一句话,20万个Eclipse Bug,足球比赛相关,柏拉图式的爱情,太阳系以外的行星,1 ...
- OpenJudge 7627 鸡蛋的硬度
描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参赛者是来自世 界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法- ...
- 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载
人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载 ImageNet挑战赛中超越人类的计算机视觉系统微软亚洲研究院视觉计算组基于深度卷积神经网络(CNN)的计 ...
- COJN 0585 800604鸡蛋的硬度
800604鸡蛋的硬度 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参 ...
随机推荐
- linux下替换不同目录下的文件的字符串
需求: 查找当前目录下的所有子目录中的catalina.sh文件中的JAVA_OPTS=开头的文件,替换为 JAVA_OPTS='-server -Xms800m -Xmx800m -XX:PermS ...
- 2、组件注册-@Configuration&@Bean给容器中注册组件
2.组件注册-@Configuration&@Bean给容器中注册组件 2.1 创建maven项目 spring-annotation pom.xml文件添加 spring-context 依 ...
- JUC-12.4-execute和sumbit的区别
在Executor接口中只定义了execute方法,而submit方法则是在ExecutorService接口中定义的. execute没有返回值,而submit有返回值. 转自: https://w ...
- 1、python--第一天练习题
#1.使用while循环输入 1 2 3 4 5 6 8 9 10 k = 0 while k < 10: k += 1 if k == 7: continue print(k) #2.求1-1 ...
- Material Icons 查找的替代办法
1 问题 1.1 国内访问 google 困难,众所周知 1.2 在平时的工作中使用 Material Icons 如何查询呢 2 办法 2.1 github.com 把包 download 2.2 ...
- 「CQOI2006」简单题 线段树
「CQOI2006」简单题 线段树 水.区间修改,单点查询.用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可 ...
- LR性能测试课程及视频教程
LR性能测试课程及视频教程课程如下: 1.性能测试核心技术-2.性能测试脚本开发-3.LR场景设计-4.LR指标分析. 1.性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各 ...
- tarjan缩点——在农场万圣节Trick or Treat on the Farm
一个房间能到另一个房间,有向图,奶牛从自己编号(1到n)的点出发,如果回到以前到过的点就停止,问每头奶牛可以经过几个点: 情况分两种, 一,奶牛在环上,能走的是环的大小,二,一条链连接一个环,大小是链 ...
- CF1200C
CF1200C 题意: 问内圆和外圆分别分成n.m份,每份有标号,问是否可以从一个部分走到另一个部分,12点钟位置一定有个线. 解法: 如果有一堵墙贯穿1和2,那么会使得两边不连通.这样的墙会显然出现 ...
- ubuntu mysql 的安装、配置、简单使用,navicat 连接
MySQL 的安装 1. 先更新 apt 安装中心: apt update 里面会有默认最新的mysql 的包. 2.安装msyql : sudo apt-get install mysql-serv ...