pandas中pd.groupby()的用法详解


Posted in Python onJune 16, 2022

在pandas中的groupby和在sql语句中的groupby有异曲同工之妙,不过也难怪,毕竟关系数据库中的存放数据的结构也是一张大表罢了,与dataframe的形式相似。

import numpy as np
import pandas as pd
from pandas import Series, DataFrame


df = pd.read_csv('./city_weather.csv')
print(df)
'''
          date city  temperature  wind
0   03/01/2016   BJ            8     5
1   17/01/2016   BJ           12     2
2   31/01/2016   BJ           19     2
3   14/02/2016   BJ           -3     3
4   28/02/2016   BJ           19     2
5   13/03/2016   BJ            5     3
6   27/03/2016   SH           -4     4
7   10/04/2016   SH           19     3
8   24/04/2016   SH           20     3
9   08/05/2016   SH           17     3
10  22/05/2016   SH            4     2
11  05/06/2016   SH          -10     4
12  19/06/2016   SH            0     5
13  03/07/2016   SH           -9     5
14  17/07/2016   GZ           10     2
15  31/07/2016   GZ           -1     5
16  14/08/2016   GZ            1     5
17  28/08/2016   GZ           25     4
18  11/09/2016   SZ           20     1
19  25/09/2016   SZ          -10     4
'''

g = df.groupby(df['city'])
# <pandas.core.groupby.groupby.DataFrameGroupBy object at 0x7f10450e12e8>

print(g.groups)

# {'BJ': Int64Index([0, 1, 2, 3, 4, 5], dtype='int64'),
# 'GZ': Int64Index([14, 15, 16, 17], dtype='int64'),
# 'SZ': Int64Index([18, 19], dtype='int64'),
# 'SH': Int64Index([6, 7, 8, 9, 10, 11, 12, 13], dtype='int64')}

print(g.size()) # g.size() 可以统计每个组 成员的 数量
'''
city
BJ    6
GZ    4
SH    8
SZ    2
dtype: int64
'''

print(g.get_group('BJ')) # 得到 某个 分组
'''
         date city  temperature  wind
0  03/01/2016   BJ            8     5
1  17/01/2016   BJ           12     2
2  31/01/2016   BJ           19     2
3  14/02/2016   BJ           -3     3
4  28/02/2016   BJ           19     2
5  13/03/2016   BJ            5     3
'''

df_bj = g.get_group('BJ')
print(df_bj.mean()) # 对这个 分组 求平均
'''
temperature    10.000000
wind            2.833333
dtype: float64
'''

# 直接使用 g 对象,求平均值
print(g.mean()) # 对 每一个 分组, 都计算分组
'''
      temperature      wind
city                       
BJ         10.000  2.833333
GZ          8.750  4.000000
SH          4.625  3.625000
SZ          5.000  2.500000
'''

print(g.max())
'''
            date  temperature  wind
city                               
BJ    31/01/2016           19     5
GZ    31/07/2016           25     5
SH    27/03/2016           20     5
SZ    25/09/2016           20     4
'''

print(g.min())
'''
            date  temperature  wind
city                               
BJ    03/01/2016           -3     2
GZ    14/08/2016           -1     2
SH    03/07/2016          -10     2
SZ    11/09/2016          -10     1
'''

# g 对象还可以使用 for 进行循环遍历
for name, group in g:
    print(name)
    print(group)


# g 可以转化为 list类型, dict类型
print(list(g)) # 元组第一个元素是 分组的label,第二个是dataframe
'''
[('BJ',          date city  temperature  wind
0  03/01/2016   BJ            8     5
1  17/01/2016   BJ           12     2
2  31/01/2016   BJ           19     2
3  14/02/2016   BJ           -3     3
4  28/02/2016   BJ           19     2
5  13/03/2016   BJ            5     3), 
('GZ',           date city  temperature  wind
14  17/07/2016   GZ           10     2
15  31/07/2016   GZ           -1     5
16  14/08/2016   GZ            1     5
17  28/08/2016   GZ           25     4), 
('SH',           date city  temperature  wind
6   27/03/2016   SH           -4     4
7   10/04/2016   SH           19     3
8   24/04/2016   SH           20     3
9   08/05/2016   SH           17     3
10  22/05/2016   SH            4     2
11  05/06/2016   SH          -10     4
12  19/06/2016   SH            0     5
13  03/07/2016   SH           -9     5), 
('SZ',           date city  temperature  wind
18  11/09/2016   SZ           20     1
19  25/09/2016   SZ          -10     4)]
'''
print(dict(list(g))) # 返回键值对,值的类型是 dataframe
'''
{'SH':           date city  temperature  wind
6   27/03/2016   SH           -4     4
7   10/04/2016   SH           19     3
8   24/04/2016   SH           20     3
9   08/05/2016   SH           17     3
10  22/05/2016   SH            4     2
11  05/06/2016   SH          -10     4
12  19/06/2016   SH            0     5
13  03/07/2016   SH           -9     5, 
'SZ':           date city  temperature  wind
18  11/09/2016   SZ           20     1
19  25/09/2016   SZ          -10     4, 
'GZ':           date city  temperature  wind
14  17/07/2016   GZ           10     2
15  31/07/2016   GZ           -1     5
16  14/08/2016   GZ            1     5
17  28/08/2016   GZ           25     4, 
'BJ':          date city  temperature  wind
0  03/01/2016   BJ            8     5
1  17/01/2016   BJ           12     2
2  31/01/2016   BJ           19     2
3  14/02/2016   BJ           -3     3
4  28/02/2016   BJ           19     2
5  13/03/2016   BJ            5     3}
'''

到此这篇关于pandas中pd.groupby()的用法详解的文章就介绍到这了,更多相关pandas pd.groupby()内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Python 相关文章推荐
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
Python获取任意xml节点值的方法
May 05 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
python中的turtle库函数简单使用教程
Jul 23 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
Python 防止死锁的方法
Jul 29 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
Python常遇到的错误和异常
Nov 02 Python
python垃圾回收机制原理分析
Apr 13 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 #Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 #Python
python内置模块之上下文管理contextlib
Jun 14 #Python
Python时间操作之pytz模块使用详解
Django框架之路由用法
Jun 10 #Python
深入理解pytorch库的dockerfile
Jun 10 #Python
如何利用python实现列表嵌套字典取值
Jun 10 #Python
You might like
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
透析PHP的配置文件php.ini
2006/10/09 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
php实现源代码加密的方法
2015/07/11 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP echo()函数讲解
2019/02/15 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
JavaScript的parseInt 取整使用
2011/05/09 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
10个Python小技巧你值得拥有
2018/09/29 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
电子商务应届生自我鉴定
2014/01/13 职场文书
文案策划求职信
2014/04/14 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
python如何做代码性能分析
2021/04/26 Python
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
拙作再改《我的收音机情缘》
2022/04/05 无线电
MySQL 数据 data 基本操作
2022/05/04 MySQL