如何使用groupby函数对数据进行分组(1)
转载自知乎:侦探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)相关推荐
- 如何使用agg函数对数据进行分组聚合
转载自知乎:侦探L 如何使用agg函数对数据进行分组聚合 - 知乎 在上篇文章中,我们详细地介绍了如何使用groupby函数对数据进行分组.而在python的数据分组中,除了groupby函数之外, ...
- 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) 目录
- pandas使用groupby函数对dataframe进行分组统计、使用as_index参数设置分组聚合的结果中分组变量不是dataframe的索引(index)
pandas使用groupby函数对dataframe进行分组统计.使用as_index参数设置分组聚合的结果中分组变量不是dataframe的索引(index) 目录
- pandas使用groupby函数按照多个分组变量进行分组聚合统计、使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe)
pandas使用groupby函数按照多个分组变量进行分组聚合统计.使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe) 目录
- SQLServer中利用NTILE函数对数据进行分组的一点使用
本文出处:http://www.cnblogs.com/wy123/p/6908377.html NTILE函数可以按照指定的排序规则,对数据按照指定的组数(M个对象,按照某种排序分N个组)进行分组, ...
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的指数权重移动(滚动)平均、例如,计算某公司的多个店铺每N天(5天)的滚动销售额指数权重移动(滚动)平均
pandas使用groupby函数计算dataframe数据中每个分组的N个数值的指数权重移动(滚动)平均(Exponential Moving Average).例如,计算某公司的多个店铺每N天(5 ...
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动最大值(rolling max)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额最大值
pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动最大值(rolling max).例如,计算某公司的多个店铺每N天(5天)的滚动销售额最大值 目录
- pandas编写自定义函数计算多个数据列的加和(sum)、使用groupby函数和apply函数聚合计算分组内多个数据列的加和
pandas编写自定义函数计算多个数据列的加和(sum).使用groupby函数和apply函数聚合计算分组内多个数据列的加和 目录
- 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 ...
最新文章
- 采购退料单新增无法获取单价
- 【BFS】【并查集】【Tarjan】【LCA】Gym - 101173H - Hangar Hurdles
- 关于jQuery对象与DOM对象
- WebDriver 小毛笔记(二)准备工作
- mysql 举例_MySQL 语句举例(一)
- Fedora上配置一个安全FTP
- C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编
- 自己动手打造一台自动驾驶车(持续更新)
- JPG图片怎么转换成Word文档
- HighNewTech:Gartner发布2021年新兴技术成熟度曲线和2022年重要战略技术趋势(信任、增长和变革三大新兴技术趋势)解读
- win10一根网线连接linux,win10系统使用一根网线连接两台电脑的操作方法
- 计算机存储程序的理论由谁提出,存储程序的概念是由谁提出来的
- 如何一秒将 iPhone 屏幕变成 S8
- 酷派android最新版本,酷云手机版下载
- 【信息学奥赛一本通】1114:白细胞计数
- 单模光电转换器怎么接_单纤光纤收发器a与b怎么放?如何使用光纤收发器的AB端?...
- 菜鸟教程---语言学习利器
- Windows远程桌面连接不上问题
- 软件设计师考试 | 计算机系统
- 第一次紧张刺激的面试