Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Pandas GroupBy的使用

Pandas GroupBy的使用

作者头像
致Great
发布于 2018-12-07 03:26:03
发布于 2018-12-07 03:26:03
2.9K00
代码可运行
举报
文章被收录于专栏:自然语言处理自然语言处理
运行总次数:0
代码可运行

任何groupby操作都会涉及到下面的三个操作之一:

  • Splitting:分割数据
  • Applying:应用一个函数
  • Combining:合并结果

在许多情况下,我们将数据分成几组,并在每个子集上应用一些功能。在应用中,我们可以执行以下操作:

  • Aggregation :计算一些摘要统计
  • Transformation :执行一些特定组的操作
  • Filtration:根据某些条件下丢弃数据

1 加载数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import numpy as np
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
         'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
         'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
         'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
         'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(df)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      Team  Rank  Year  Points
0   Riders     1  2014     876
1   Riders     2  2015     789
2   Devils     2  2014     863
3   Devils     3  2015     673
4    Kings     3  2014     741
5    kings     4  2015     812
6    Kings     1  2016     756
7    Kings     1  2017     788
8   Riders     2  2016     694
9   Royals     4  2014     701
10  Royals     1  2015     804
11  Riders     2  2017     690

2 数据分组

Pandas对象可以拆分为任何对象。分割对象的方法有多种:

  • obj.groupby('key')
  • obj.groupby(['key1','key2'])
  • obj.groupby(key,axis=1)

现在让我们看看如何将分组对象应用于DataFrame对象

2.1 根据某一列分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.groupby('Team')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x000001B33FFA0DA0>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看分组
df.groupby('Team').groups
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{'Devils': Int64Index([2, 3], dtype='int64'),
 'Kings': Int64Index([4, 6, 7], dtype='int64'),
 'Riders': Int64Index([0, 1, 8, 11], dtype='int64'),
 'Royals': Int64Index([9, 10], dtype='int64'),
 'kings': Int64Index([5], dtype='int64')}

2.2 根绝多列进行分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.groupby(['Team','Year']).groups
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{('Devils', 2014): Int64Index([2], dtype='int64'),
 ('Devils', 2015): Int64Index([3], dtype='int64'),
 ('Kings', 2014): Int64Index([4], dtype='int64'),
 ('Kings', 2016): Int64Index([6], dtype='int64'),
 ('Kings', 2017): Int64Index([7], dtype='int64'),
 ('Riders', 2014): Int64Index([0], dtype='int64'),
 ('Riders', 2015): Int64Index([1], dtype='int64'),
 ('Riders', 2016): Int64Index([8], dtype='int64'),
 ('Riders', 2017): Int64Index([11], dtype='int64'),
 ('Royals', 2014): Int64Index([9], dtype='int64'),
 ('Royals', 2015): Int64Index([10], dtype='int64'),
 ('kings', 2015): Int64Index([5], dtype='int64')}

2.3 遍历分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grouped = df.groupby('Team')
for name,group in grouped:
    print(name)
    print(group)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Devils
     Team  Rank  Year  Points
2  Devils     2  2014     863
3  Devils     3  2015     673
Kings
    Team  Rank  Year  Points
4  Kings     3  2014     741
6  Kings     1  2016     756
7  Kings     1  2017     788
Riders
      Team  Rank  Year  Points
0   Riders     1  2014     876
1   Riders     2  2015     789
8   Riders     2  2016     694
11  Riders     2  2017     690
Royals
      Team  Rank  Year  Points
9   Royals     4  2014     701
10  Royals     1  2015     804
kings
    Team  Rank  Year  Points
5  kings     4  2015     812

默认情况下,groupby对象标签名称与组名称相同,看下面的例子就清楚了

2.4 选取某一个分组

使用get_group()方法,我们可以选择一个组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grouped = df.groupby('Year')
print(grouped.get_group(2014))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     Team  Rank  Year  Points
0  Riders     1  2014     876
2  Devils     2  2014     863
4   Kings     3  2014     741
9  Royals     4  2014     701

3 Aggregations(聚合)

聚合函数返回每个组的单个聚合值。一旦创建了group by对象,就可以对分组数据执行多个聚合操作。

3.1 常见的是通过agg方法来实现aggregation

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grouped = df.groupby('Year')
print(grouped['Points'].agg(np.mean))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Year
2014    795.25
2015    769.50
2016    725.00
2017    739.00
Name: Points, dtype: float64

3.2 查看每个组大小的另一种方法是应用size()函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grouped = df.groupby('Team')
print(grouped.agg(np.size))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        Rank  Year  Points
Team                      
Devils     2     2       2
Kings      3     3       3
Riders     4     4       4
Royals     2     2       2
kings      1     1       1

3.3 一次应用多个聚合函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grouped = df.groupby('Team')
print(grouped['Points'].agg([np.sum, np.mean, np.std]))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         sum        mean         std
Team                                
Devils  1536  768.000000  134.350288
Kings   2285  761.666667   24.006943
Riders  3049  762.250000   88.567771
Royals  1505  752.500000   72.831998
kings    812  812.000000         NaN

4 Transformations

对组或列的转换将返回一个对象,该对象的索引大小与正在分组的对象的大小相同。因此,转换返回与组块大小相同的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grouped = df.groupby('Team')
score = lambda x: (x - x.mean()) / x.std()*10
print(grouped.transform(score))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         Rank       Year     Points
0  -15.000000 -11.618950  12.843272
1    5.000000  -3.872983   3.020286
2   -7.071068  -7.071068   7.071068
3    7.071068   7.071068  -7.071068
4   11.547005 -10.910895  -8.608621
5         NaN        NaN        NaN
6   -5.773503   2.182179  -2.360428
7   -5.773503   8.728716  10.969049
8    5.000000   3.872983  -7.705963
9    7.071068  -7.071068  -7.071068
10  -7.071068   7.071068   7.071068
11   5.000000  11.618950  -8.157595

5 Filtration

过滤数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(df.groupby('Team').filter(lambda x: len(x) >= 3))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      Team  Rank  Year  Points
0   Riders     1  2014     876
1   Riders     2  2015     789
4    Kings     3  2014     741
6    Kings     1  2016     756
7    Kings     1  2017     788
8   Riders     2  2016     694
11  Riders     2  2017     690

6 参考

https://www.tutorialspoint.com/python_pandas/python_pandas_groupby.htm

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pandas-18.分组
Pandas-18.分组 任何分组操作都涉及原始对象的以下操作之一: 分割对象 应用一个函数 结合的结果 将数据分组之后,每个自己可以执行以下种类的操作: 聚合 - 计算汇总统计 转换 - 执行特定于组的操作 过滤 以如下代码作为例子: import pandas as pd ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings', 'kings', 'Kings', 'Kings', 'Riders',
悠扬前奏
2019/05/29
6420
数据分析 ——— pandas基础(四)
利用pandas来进行数据处理的方法太多了,在这里继续更新一下对缺失数据的处理,以及数据的分组,聚合函数的使用。
andrew_a
2019/08/16
1.2K0
Pandas 第一轮零基础扫盲
公众号原文首发:https://mp.weixin.qq.com/s/4RYfYc8_2vNxvq_B1bZrUA
AI悦创
2022/06/06
2.2K0
【数据分析可视化】数据分组技术GroupBy
理解GroupBy 类似于数据库分组的 GroupBy操作和数据库类似 城市天气进行GroupBy操作 对group的单个列求平均值是Series 对group求平均值返回DataF
瑞新
2020/07/07
9220
【数据分析可视化】数据分组技术GroupBy
Pandas入门2(DataFunctions+Maps+groupby+sort_values)
3. Summary Functions and Maps 3.1 Summary Functions 数据总结函数 3.1.1 describe() wine_rev.points.describe(),各种统计信息,数字信息总结 # 数字列的总结 count 129971.000000 mean 88.447138 std 3.039730 min 80.000000 25% 86.000000 50% 88
Michael阿明
2020/07/13
7100
Pandas入门2(DataFunctions+Maps+groupby+sort_values)
【数据分析可视化】数据聚合技术Aggregation
import numpy as np import pandas as pd from pandas import Series, DataFrame # 读入城市天气csv文件 df = pd.read_csv('/Users/bennyrhys/Desktop/数据分析可视化-数据集/homework/city_weather.csv') df date city temperature wind 0 03/01/2016 BJ 8 5 1 17/01/2016 BJ 12 2
瑞新
2020/07/07
6140
pandas的iterrows函数和groupby函数
iterrows() 是在DataFrame中的行进行迭代的一个生成器,它返回每行的索引及一个包含行本身的对象。
润森
2022/09/22
3.2K0
pandas的iterrows函数和groupby函数
python中groupby()函数讲解
# -*- coding: utf-8 -*- import pandas as pd import numpy as np df = pd.DataFrame({'key1':list('aabba'), 'key2': ['one','two','one','two','one'], 'data1': ['1','3','5','7','9'], 'data2': ['2','4','6','
py3study
2020/01/07
3K0
25个例子学会Pandas Groupby 操作(附代码)
来源:DeepHub IMBA本文约2300字,建议阅读5分钟本文用25个示例详细介绍groupby的函数用法。 groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。 如果我们有一个包含汽车品牌和价格信息的数据集,那么可以使用groupby功能来计算每个品牌的平均价格。 在本文中,我们将使用25个示例来详细介绍groupby函数的用法。这25个示例中还包含了一些不太常用但在各种任务中都能派上用场的操作。 这里使用
数据派THU
2022/10/09
3.1K0
25个例子学会Pandas Groupby 操作(附代码)
【数据处理包Pandas】分组及相关操作
数据集team.xlsx下载地址: 链接:https://pan.quark.cn/s/9e3b2a933510 提取码:7i2y
Francek Chen
2025/01/22
1990
【数据处理包Pandas】分组及相关操作
数据处理技巧 | 带你了解Pandas.groupby() 常用数据处理方法
今天我们继续推出一篇数据处理常用的操作技能汇总:灵活使用pandas.groupby()函数,实现数据的高效率处理,主要内容如下:
DataCharm
2021/02/22
3.8K0
数据处理技巧 | 带你了解Pandas.groupby() 常用数据处理方法
Pandas GroupBy 深度总结
今天,我们将探讨如何在 Python 的 Pandas 库中创建 GroupBy 对象以及该对象的工作原理。我们将详细了解分组过程的每个步骤,可以将哪些方法应用于 GroupBy 对象上,以及我们可以从中提取哪些有用信息
周萝卜
2022/09/28
5.8K0
Pandas GroupBy 深度总结
pandas系列5-分组_groupby
groupby 是pandas 中非常重要的一个函数, 主要用于数据聚合和分类计算. 其思想是“split-apply-combine”(拆分 - 应用 - 合并). 拆分:groupby,按照某个属性column分组,得到的是一个分组之后的对象 应用:对上面的对象使用某个函数,可以是自带的也可以是自己写的函数,通过apply(function) 合并:最终结果是个S型数据 pandas分组和聚合详解 官方文档 DataFrame.``groupby(self, by=None, axis=0,
皮大大
2021/03/02
1.7K0
[编程经验] Pandas中比较好用的几个方法
话说我现在好久不做深度学习的东西了,做了一段时间是的NLP,以为可以去尝试各种高大上的算法,然而现在还并没有,反而觉得更像是做数据挖掘的。。平时遇到的比较多的问题,大多数都是数据清洗的工作,这时候工具就显得很重要,有一个好的工具能起到事半功倍的效果,比如突然有个idea,然后自己开始呼哧呼哧的造轮子,最后才发现,哦,原来都有现成的方法,本来一行代码就可以搞定的问题,到最后写了几十行。 正所谓,“欲闪其事,必先利其器”啊。 好了,废话不多说,下面介绍几个神奇的方法。 数据筛选 先把数据导
用户1622570
2018/04/11
1.8K0
总结了25个Pandas Groupby 经典案例!!
groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。
用户6888863
2023/03/01
3.4K0
总结了25个Pandas Groupby 经典案例!!
pandas多表操作,groupby,时间操作
使用场景:有两张表left和right,一般要求它们的表格结构一致,数据量也一致,使用right的数据去填补left的数据缺漏 如果在同一位置left与right数据不一致,保留left的数据
李智
2018/08/03
3.8K0
pandas多表操作,groupby,时间操作
Pandas高级教程之:GroupBy用法
pandas中的DF数据类型可以像数据库表格一样进行groupby操作。通常来说groupby操作可以分为三部分:分割数据,应用变换和和合并数据。
程序那些事
2021/07/12
2.9K0
几个高效Pandas函数
请注意,本文编写于 964 天前,最后修改于 964 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1.6K0
几个高效Pandas函数
周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8
掉头发,有借口吧 不洗头,有借口吧 不洗袜子,有借口吧 不去看电影,有借口吧 不陪女朋友,有借口吧
梦想橡皮擦
2019/06/18
8630
pandas中的数据处理利器-groupby
在数据分析中,常常有这样的场景,需要对不同类别的数据,分别进行处理,然后再将处理之后的内容合并,作为结果输出。对于这样的场景,就需要借助灵活的groupby功能来处理。
生信修炼手册
2020/07/02
3.6K0
相关推荐
Pandas-18.分组
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文