破周三,前不着村后不着店的,只好学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
的哦~
迷糊了吧,迷糊也没事,拿的住手机就行
拍这里,拍这个里
原文地址:https://www.cnblogs.com/happymeng/p/11044927.html
- 简单代码让WordPress 支持电子邮箱(Email)作为登录名
- .NET Migration工具
- 如何有效监控.NET 应用程序
- 写入Ring Buffer
- Enterprise Library 4 缓存快速入门
- Enterprise Library 4 缓存应用程序块的设计
- 让WordPress 在RSS 中Feed 输出支持“More”标签
- WordPress文章版权保护:复制文字自动添加版权信息
- 替换WordPress 自带默认的 jQuery库, jQuery库页脚加载
- Enterprise Library 4 数据访问应用程序块
- 替换EnterPrise Library 4.0 缓存应用程序块的CacheManager
- Enterprise Library 4.0缓存应用程序块
- 通过.htaccess 让WordPress 的上传文件夹更安全
- asp.net 性能调较
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法