转载自知乎:侦探L 如何使用groupby函数对数据进行分组(1) - 知乎

在使用python进行数据分析的过程中,采用groupby函数对数据进行分组是一项很常用的操作,它可以帮助我们更清晰地了解我们所用数据的组成及规律,本节将为大家简单介绍一下如果使用groupby函数对数据进行分组的具体做法。

1、函数说明(什么是数据分组?具体要做什么)

总的来说,实现数据分组这一操作总共可以分成三步:

split→apply→combine

(1)第一步,split(分)。按照键值(key)或者分组变量将数据分组。

(2)第二步,apply(用)。对于第一步分组后的数据,应用函数进行计算(可以是python自带的函数,可以是我们自己编写的函数)。

(3)第三步,combine(合)。将经过第二步计算后的结果进行聚合。

放个图方便大家理解:

(图网侵删)

2、还是老规矩,举个例子动手操作一下:

首先还是用pandas做一个实验用的数据表:

import pandas as pd
import numpy as npdf = pd.DataFrame({'data1' : ['a', 'b', 'c', 'b', 'a'],'data2' : ['one', 'one', 'one', 'two', 'one'],'num1' : [1,2,3,4,5],'num2' : [6,7,8,9,10]})
df

运行一下看看结果:

可以看到这是一个5行4列的数据表,下面进行实验操作:

(1)首先,我们将data1当做我们的分组键值,对num1进行分组:

grouped = df['num1'].groupby(df['data1'])

注意~这里的grouped不再是一个数据框,而是一个GroupBy对象,我们可以看一下它的数据类型:

再次注意~在这一步,我们并没有进行任何计算,仅仅是创建用data1分组后创建了一个GroupBy对象,下面我们将针对这个对象进行函数计算。

(2)在第一步的基础上求均值(mean)以及求和(sum)。

可以看到,运算结果与我们预期相符。

(3)使用两个分组变量对数据进行分组操作

刚刚我们将data1当做我们的分组键值,只用了一个变量来分组,实际上我们可以使用多个分组变量进行数据分组操作,下面我们将data1和data2都作为分组变量:

group2= df['num2'].groupby([df['data1'], df['data2']])
mean_group2=group2.mean()
mean_group2

可以看到,数据结果同样符合我们的预期。

(4)上面分组变量都是我们的数据表df内部的Series,实际上,只要是和data等长的数组都可以进行类似操作,比如:

我们定义如下两个数组(array),再看看用groupby会发生什么。

city = np.array(['beijing', 'shenzhen', 'shenzhen', 'beijing', 'beijing'])
years = np.array([2019,2020,2019,2020,2020])
df['num1'].groupby([city, years]).mean()

可以看到,原来的数据表还是照我们的要求进行分组了。(get!)

3、尝试对分组进行迭代

实际上在我们的数据过程中,我们的GroupBy对象是支持迭代操作的。这样做的话,可以产生一个由分组变量名和数据块组成的元组:

for num,data in df.groupby('data1'):print(num)print(data)

可以看到,输出结果变成元组了(把表格分开了)。

如何我们想要用两个分组变量进行分组怎么办呢?也是可以的。

下面我们来看看用两个分组变量时会发生什么:

for (d1,d2),  num in df.groupby(['data1','data2']):print (d1,d2)print (num)

依旧完美输出!分组变量变成了两个。

我们可以将上面的结果转化为list(列表),来看看结果是什么样的:

list(df.groupby(['data1','data2']))

再来看看这个列表的第一个元素长什么样:

list(df.groupby(['data1','data2']))[0]

可以转成字典吗?答案是肯定的。我们也可以将结果转化为dict(字典):

dict(list(df.groupby(['data1','data2'])))

同样的,我们看看第一个元素:

dict(list(df.groupby(['data1','data2'])))["a","one"]

以上都是基于行进行分组,因为默认情况下groupby是在axis=0(行方向)进行分组,实际上,我们也可以指定axis=1(列方向)进行分组:

grouped=df.groupby(df.dtypes,axis=1)
list(grouped)[0]

注意~分组的时候,下面两种表达方式都是一样的~

(1)df.groupby('key1')['data1']

(2)df.data1.groupby(df.key1)


如何使用groupby函数对数据进行分组(1)相关推荐

  1. 如何使用agg函数对数据进行分组聚合

    转载自知乎:侦探L  如何使用agg函数对数据进行分组聚合 - 知乎 在上篇文章中,我们详细地介绍了如何使用groupby函数对数据进行分组.而在python的数据分组中,除了groupby函数之外, ...

  2. pandas使用groupby函数计算dataframe每个分组对应的数据行的个数(size of each group in dataframe, rows count of group)

    pandas使用groupby函数计算dataframe每个分组对应的数据行的个数(size of each group in dataframe, rows count of group) 目录

  3. pandas使用groupby函数对dataframe进行分组统计、使用as_index参数设置分组聚合的结果中分组变量不是dataframe的索引(index)

    pandas使用groupby函数对dataframe进行分组统计.使用as_index参数设置分组聚合的结果中分组变量不是dataframe的索引(index) 目录

  4. pandas使用groupby函数按照多个分组变量进行分组聚合统计、使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe)

    pandas使用groupby函数按照多个分组变量进行分组聚合统计.使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe) 目录

  5. SQLServer中利用NTILE函数对数据进行分组的一点使用

    本文出处:http://www.cnblogs.com/wy123/p/6908377.html NTILE函数可以按照指定的排序规则,对数据按照指定的组数(M个对象,按照某种排序分N个组)进行分组, ...

  6. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的指数权重移动(滚动)平均、例如,计算某公司的多个店铺每N天(5天)的滚动销售额指数权重移动(滚动)平均

    pandas使用groupby函数计算dataframe数据中每个分组的N个数值的指数权重移动(滚动)平均(Exponential Moving Average).例如,计算某公司的多个店铺每N天(5 ...

  7. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动最大值(rolling max)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额最大值

    pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动最大值(rolling max).例如,计算某公司的多个店铺每N天(5天)的滚动销售额最大值 目录

  8. pandas编写自定义函数计算多个数据列的加和(sum)、使用groupby函数和apply函数聚合计算分组内多个数据列的加和

    pandas编写自定义函数计算多个数据列的加和(sum).使用groupby函数和apply函数聚合计算分组内多个数据列的加和 目录

  9. pandas使用sort_values函数和groupby函数获取每个分组数值最小的前N行数据(n rows with smallest column value in each group)

    pandas使用sort_values函数和groupby函数获取每个分组数值最小的前N行数据(n rows with smallest column value in each group in d ...

最新文章

  1. 采购退料单新增无法获取单价
  2. 【BFS】【并查集】【Tarjan】【LCA】Gym - 101173H - Hangar Hurdles
  3. 关于jQuery对象与DOM对象
  4. WebDriver 小毛笔记(二)准备工作
  5. mysql 举例_MySQL 语句举例(一)
  6. Fedora上配置一个安全FTP
  7. C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编
  8. 自己动手打造一台自动驾驶车(持续更新)
  9. JPG图片怎么转换成Word文档
  10. HighNewTech:Gartner发布2021年新兴技术成熟度曲线和2022年重要战略技术趋势(信任、增长和变革三大新兴技术趋势)解读
  11. win10一根网线连接linux,win10系统使用一根网线连接两台电脑的操作方法
  12. 计算机存储程序的理论由谁提出,存储程序的概念是由谁提出来的
  13. 如何一秒将 iPhone 屏幕变成 S8
  14. 酷派android最新版本,酷云手机版下载
  15. 【信息学奥赛一本通】1114:白细胞计数
  16. 单模光电转换器怎么接_单纤光纤收发器a与b怎么放?如何使用光纤收发器的AB端?...
  17. 菜鸟教程---语言学习利器
  18. Windows远程桌面连接不上问题
  19. 软件设计师考试 | 计算机系统
  20. 第一次紧张刺激的面试

热门文章

  1. 力天创见智慧客流方案
  2. 计算集群MOSIX-3.1.1.1.for_kernel-3.2.23 配置
  3. 2023年4月Kali MSF命令模块最详细模块与利用解释整合
  4. 足球竞赛规则的部分补充说明
  5. 项目笔记——简易RPC框架(待升级)
  6. RESTFul与RESTFul案例
  7. Flink系列文档-(YY05)-Flink编程API-多流算子
  8. 格隆汇笔记-黄勇演讲
  9. 物联网培训预示着我们将进入智能时代
  10. VoIP通话-基于SIP协议的Asterisk(一)-实现流程