Python数据分析中Groupby用法之通过字典或Series进行分组
在数据分析中有时候需要自己定义分组规则 这里简单介绍一下用一个字典实现分组
people=DataFrame(
np.random.randn(5,5),
columns=['a','b','c','d','e'],
index=['Joe','Steve','Wes','Jim','Travis']
)
mapping={'a':'red','b':'red','c':'blue','d':'blue','e':'red','f':'orange'}
by_column=people.groupby(mapping,axis=1)#列方向上进行分组
这里不知道python底层是怎么运行的,最好把运行的结果打印出来看一下
for i in by_column:
print (i) 遍历的结果:
('blue', c d
Joe 0.218189 -0.228336
Steve 1.677264 0.630303
Wes 0.315320 -0.250787
Jim 3.343462 0.483021
Travis 0.854553 -0.760884)
('red', a b e
Joe 0.218164 0.823654 -1.425720
Steve 1.191175 -0.327735 1.926470
Wes -1.418855 0.497466 0.110105
Jim -1.157157 0.817122 0.749023
Travis -0.440583 -0.907922 1.374294) 从结果可以看到,把a b e分给了red, c d分给了blue
a b e--->red c d --->blue
接下来再来执行 people.groupby(mapping,axis=1).mean()
blue red
Joe 0.241336 -0.182099
Steve 0.459773 -0.448336
Wes 0.205278 0.605721
Jim -0.094838 1.254174
Travis 0.354140 0.142075
从结果看到在列方向group分组 执行聚合函数mean()后列索引就只有 blue和red了。
整个过程可以这么理解 在列方向上进行分组 a b e为一组为red,c d 为一组为blue。最后以red blue作为新DataFraem的列索引 同样Series也有同样的功能,它可以被看作一个固定大小的映射。对于上面的那个例子,如果用series作为分组键,则pandas会检查Series以确保其索引分组轴是对齐的:
ser=Series(mapping)
a red
b red
c blue
d blue
e red
f orange
by_ser_group=people.groupby(ser,axis=1).mean()
blue red
Joe 0.241336 -0.182099
Steve 0.459773 -0.448336
Wes 0.205278 0.605721
Jim -0.094838 1.254174
Travis 0.354140 0.142075
从结果可以看到,通过字典进行分组和通过Series进行分组结果是相同的。也就是说他们执行的原理是相同的,都是把索引(对series来说)或字典的key与Dataframe的索引进行匹配,
字典中value或series中values值相同的会被分到一个组中,最后根据每组进行在聚合。
groupby的用法很多,之后有时间我会慢慢更新博客。如果有那些地方有错欢迎大家指出,一块学习,共同进步。
Python数据分析中Groupby用法之通过字典或Series进行分组的更多相关文章
- Python 数据分析中常用的可视化工具
Python 数据分析中常用的可视化工具 1 Matplotlib 用于创建出版质量图表的绘图工具库,目的是为 Python 构建一个 Matlab 式的绘图接口. 1.1 安装 Anaconada ...
- python数据分析中常用的库
Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用性和跨平台性,这里就为大家分享几个不错的数据分析工具,需要的朋友可以参考下 Pyth ...
- Python面向对象中super用法与MRO机制
1. 引言 最近在研究django rest_framework的源码,老是遇到super,搞得一团蒙,多番查看各路大神博客,总算明白了一点,今天做一点总结. 2. 为什么要用super 1)让代码维 ...
- 小白学 Python 数据分析(11):Pandas (十)数据分组
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- Python数据分析中 DataFrame axis=0(0轴)与axis=1(1轴)的理解
python中的axis究竟是如何定义的呢?他们究竟代表是DataFrame的行还是列? 直接上代码people=DataFrame(np.random.randn(5,5), columns=['a ...
- Python数据分析中 DataFrame axis=0与axis=1的理解
python中的axis究竟是如何定义的呢?他们究竟代表是DataFrame的行还是列? 直接上代码people=DataFrame(np.random.randn(5,5), columns=['a ...
- Python 数据分析中金融数据的来源库和简单操作
目录 金融数据 pandas-datareader TuShare 金融学图表 案例 金融数据 数据分析离不开数据的获取,这里介绍几种常用的获取金融方面数据的方法. pandas-datareader ...
- Python数据分析中对重复值、缺失值、空格的处理
对重复值的处理 把数据结构中,行相同的数据只保留一行 函数语法: drop_duplicates() from pandas import read_csv df = read_csv(文件位置) n ...
- python class 中__next__用法
class A(): def __init__(self,b): self.b=b # def __iter__(self): # 这个函数可以用,表示迭代标志,但也可以省略 # return sel ...
随机推荐
- p1364 医院设置 题解
思路:floyd 很普通的思路. 先用floyd求出两个边之间的距离,然后乘以人数. 代码: #include<iostream> #include<cstring> usin ...
- 我说CMMI之五:CMMI 4个等级的区别--转载
我说CMMI之五:CMMI 4个等级的区别 了解CMMI的人都知道CMMI有5个等级,但是要将5个等级的区别真正说明白,说透彻不太容易.下面我们用一个表格概括之.表格中并没有1级,1级在CMMI中没有 ...
- K8S集群组件
master节点主要由apiserver.controller-manager和scheduler三个组件,以及一个用于集群状态存储的etcd存储服务组成,而每个node节点则主要包含kubelet. ...
- golang之 Array(数组)
目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range ...
- 手机端 设置html上font-size的值 使用rem
在head标签上加入: (function() { var b = navigator.userAgent; ipad = b.match(/(iPad).*OS\s([\d_]+)/) ? true ...
- 网络编程简介(OSI七层协议,TCP协议原理,三次握手与四次挥手)
目录 网络编程 软件开发架构 C/S架构 B/S架构 网络编程的发展史 互联网协议 1.物理连接层 2.数据链路层 3.网络层 4.传输层 5.应用层 三次握手四次挥手 三次握手建链接 数据传输 四次 ...
- 面试题Redis最常被问到知识点总结
1.什么是redis? redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发.高扩展,大数据存储等一系列的问题而产生的数据库 ...
- C# 使用vs2013 写 windows服务
第一步:添加windows服务项目 并起一个 好看的名字 第二步:添加安装程序 第三步:右键点击serviceProcessInstaller1属性,在Account中选择LocalSystem 第四 ...
- hdu_1712(dp,背包)
hdu_1712 \[dp[i][j]\] 表示前i个物品用了j天得到的最大收益 \[ dp[i][j] = max(dp[i-1][j],dp[i][j-k]+ k*v[i][k]) \qquad ...
- 论文阅读:Forwarding Metamorphosis: Fast Programmable Match-Action Processing in Hardware for SDN
摘要: 在软件定义网络中,控制平面在物理上与转发平面分离,控制软件使用开放接口(例如OpenFlow)对转发平面(例如,交换机和路由器)进行编程. 本文旨在克服当前交换芯片和OpenFlow协议的两个 ...