Pandas-18.分组

作者: 悠扬前奏 | 来源:发表于2019-04-04 17:29 被阅读0次

Pandas-18.分组

  • 任何分组操作都涉及原始对象的以下操作之一:
    • 分割对象
    • 应用一个函数
    • 结合的结果
  • 将数据分组之后,每个自己可以执行以下种类的操作:
    • 聚合 - 计算汇总统计
    • 转换 - 执行特定于组的操作
    • 过滤

以如下代码作为例子:

import pandas as pd
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)
'''
      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
'''

拆成分组

  • obj.groupby(‘key’) - 单条件分组
  • obj.groupby([‘key1’,’key2’]) - 多条件分组
  • obj.groupby(key,axis=1) - 换轴分组
print (df.groupby(['Team',"Year"]))
# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x108aab278>

查看分组

print (df.groupby('Team').groups)
'''
{'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')}
'''

迭代遍历分组

默认groupby对象具有分组名相同的标签名称

for name,group in  df.groupby('Year'):
    print (name)
    print (group)
'''
2014
     Team  Rank  Year  Points
0  Riders     1  2014     876
2  Devils     2  2014     863
4   Kings     3  2014     741
9  Royals     4  2014     701
2015
      Team  Rank  Year  Points
1   Riders     2  2015     789
3   Devils     3  2015     673
5    kings     4  2015     812
10  Royals     1  2015     804
2016
     Team  Rank  Year  Points
6   Kings     1  2016     756
8  Riders     2  2016     694
2017
      Team  Rank  Year  Points
7    Kings     1  2017     788
11  Riders     2  2017     690
'''

选择一个分组

get_group()方法可以选择一个分组:

print (df.groupby('Year').get_group(2014))
'''
     Team  Rank  Year  Points
0  Riders     1  2014     876
2  Devils     2  2014     863
4   Kings     3  2014     741
9  Royals     4  2014     701
'''

聚合

创建分组之后,可以在此基础上为每个分组返回单个聚合值:

import numpy as np
print (df.groupby('Team').agg(np.size))
'''
        Rank  Year  Points
Team                      
Devils     2     2       2
Kings      3     3       3
Riders     4     4       4
Royals     2     2       2
kings      1     1       1
'''

可以使用多个聚合函数

print (df.groupby('Team').agg([np.size, np.sum,np.std]))
'''
       Rank               Year                 Points                  
       size sum       std size   sum       std   size   sum         std
Team                                                                   
Devils    2   5  0.707107    2  4029  0.707107      2  1536  134.350288
Kings     3   5  1.154701    3  6047  1.527525      3  2285   24.006943
Riders    4   7  0.500000    4  8062  1.290994      4  3049   88.567771
Royals    2   5  2.121320    2  4029  0.707107      2  1505   72.831998
kings     1   4       NaN    1  2015       NaN      1   812         NaN
'''

转换

transform()方法可以对分组进行转换,返回与分组相同大小的结果。

print (df.groupby('Team').transform(lambda x: x / 2))
'''
    Rank    Year  Points
0    0.5  1007.0   438.0
1    1.0  1007.5   394.5
2    1.0  1007.0   431.5
3    1.5  1007.5   336.5
4    1.5  1007.0   370.5
5    2.0  1007.5   406.0
6    0.5  1008.0   378.0
7    0.5  1008.5   394.0
8    1.0  1008.0   347.0
9    2.0  1007.0   350.5
10   0.5  1007.5   402.0
11   1.0  1008.5   345.0
'''

过滤

filter()方法用于过滤数据

print(df.groupby('Team').filter(lambda x:  len(x) > 3))
'''
      Team  Rank  Year  Points
0   Riders     1  2014     876
1   Riders     2  2015     789
8   Riders     2  2016     694
11  Riders     2  2017     690
'''

参加三次以上IPL的队伍

相关文章

  • Pandas-18.分组

    Pandas-18.分组 任何分组操作都涉及原始对象的以下操作之一:分割对象应用一个函数结合的结果 将数据分组之后...

  • 【实体类】权限分组

    字段 分组id 分组名 分组描述名 分组描述信息 权限list 懒

  • 《SQL必知必会》第 10 课 分组数据

    目标: 10.1 数据分组 10.2 创建分组 10.3 过滤分组 10.4 分组和排序 10.5 SELECT ...

  • SQL应注意小知识点(仅供个人学习)

    一、 分组 group by 多个字段进行分组时,分组字段全部相同时才能进行分组注意多个分组不是一个字段分组之后另...

  • Mysql笔记之分组函数和分组查询

    1、分组函数 2、分组查询 3、分组查询案例

  • Pandas分组统计与时间序列

    分组统计 1.创建分组 2.显示分组内容 3.分组对象的统计方法 分组对象的属性和方法 直接执行describe(...

  • 分组密码DES

    分组密码的原理 DES是分组密码,分组密码将消息进行等长分组,使用同一密钥对每个分组进行加密。 DES算法 DES...

  • Pandas - 10.3 单个分组聚合

    单个分组 保存分组 选择分组 涉及多个变量的分组计算 针对可能计算的列计算,删除不能计算的列 历遍分组 group...

  • uCloud V1.2版本详细说明

    1、提供设备分组批量下发配置功能。 (1)在分组管理中新建分组。 (2)选择分组,然后在分组设备中添加设备。 (3...

  • 分组

    :() 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:(root)+ 分组括号中的模式匹配到的内容会被正则...

网友评论

    本文标题:Pandas-18.分组

    本文链接:https://www.haomeiwen.com/subject/ffttiqtx.html