zoukankan      html  css  js  c++  java
  • pandas分组group

    Pandas对象可以分成任何对象。有多种方式来拆分对象,如 -

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

    现在来看看如何将分组对象应用于DataFrame对象

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/5/24 15:03
    # @Author  : zhang chao
    # @File    : s.py
    import numpy as np
    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)
    print (df)
    print("=======================================")
    print (df.groupby('Team'))
    print("=======================================")
    print (df.groupby('Team').groups)
    print("=======================================")
    print (df.groupby(['Team','Year']).groups)
    #迭代遍历分组
    print("迭代遍历分组:")
    print("=======================================")
    grouped = df.groupby('Year')
    for name,group in grouped:
        print (name)
        print (group)
    #使用get_group()方法,可以选择一个组
    print("使用get_group()方法,可以选择一个组:")
    print("=======================================")
    grouped = df.groupby('Year')
    print (grouped.get_group(2014))
    print("=======================================")
    grouped = df.groupby('Year')
    print (grouped['Points'].agg(np.mean))
    #另一种查看每个分组的大小的方法是应用size()函数
    print("另一种查看每个分组的大小的方法是应用size()函数:")
    print("=======================================")
    grouped = df.groupby('Team')
    print (grouped.agg(np.size))
    #通过分组系列,还可以传递函数的列表或字典来进行聚合
    print("通过分组系列,还可以传递函数的列表或字典来进行聚合:")
    print("=======================================")
    grouped = df.groupby('Team')
    agg = grouped['Points'].agg([np.sum, np.mean, np.std])
    print (agg)
    #分组或列上的转换返回索引大小与被分组的索引相同的对象。因此,转换应该返回与组块大小相同的结果。
    print("分组或列上的转换返回索引大小与被分组的索引相同的对象。因此,转换应该返回与组块大小相同的结果。:")
    print("=======================================")
    grouped = df.groupby('Team')
    score = lambda x: (x - x.mean()) / x.std()*10
    print (grouped.transform(score))
    #过滤根据定义的标准过滤数据并返回数据的子集。filter()函数用于过滤数据
    print("=======================================")
    print("过滤根据定义的标准过滤数据并返回数据的子集。filter()函数用于过滤数据:")
    df = pd.DataFrame(ipl_data)
    filter = df.groupby('Team').filter(lambda x: len(x) >= 3)
    print (filter)
    print("=======================================")
    
    
    D:Downloadpython3python3.exe D:/Download/pycharmworkspace/s.py
        Points  Rank    Team  Year
    0      876     1  Riders  2014
    1      789     2  Riders  2015
    2      863     2  Devils  2014
    3      673     3  Devils  2015
    4      741     3   Kings  2014
    5      812     4   kings  2015
    6      756     1   Kings  2016
    7      788     1   Kings  2017
    8      694     2  Riders  2016
    9      701     4  Royals  2014
    10     804     1  Royals  2015
    11     690     2  Riders  2017
    =======================================
    <pandas.core.groupby.DataFrameGroupBy object at 0x000000000D6317B8>
    =======================================
    {'Kings': Int64Index([4, 6, 7], dtype='int64'), 'Riders': Int64Index([0, 1, 8, 11], dtype='int64'), 'Devils': Int64Index([2, 3], dtype='int64'), 'Royals': Int64Index([9, 10], dtype='int64'), 'kings': Int64Index([5], dtype='int64')}
    =======================================
    {('Kings', 2017): Int64Index([7], dtype='int64'), ('Riders', 2015): Int64Index([1], dtype='int64'), ('Kings', 2016): Int64Index([6], dtype='int64'), ('Riders', 2014): Int64Index([0], dtype='int64'), ('Royals', 2015): Int64Index([10], dtype='int64'), ('Royals', 2014): Int64Index([9], dtype='int64'), ('kings', 2015): Int64Index([5], dtype='int64'), ('Kings', 2014): Int64Index([4], dtype='int64'), ('Riders', 2017): Int64Index([11], dtype='int64'), ('Devils', 2014): Int64Index([2], dtype='int64'), ('Riders', 2016): Int64Index([8], dtype='int64'), ('Devils', 2015): Int64Index([3], dtype='int64')}
    迭代遍历分组:
    =======================================
    2014
       Points  Rank    Team  Year
    0     876     1  Riders  2014
    2     863     2  Devils  2014
    4     741     3   Kings  2014
    9     701     4  Royals  2014
    2015
        Points  Rank    Team  Year
    1      789     2  Riders  2015
    3      673     3  Devils  2015
    5      812     4   kings  2015
    10     804     1  Royals  2015
    2016
       Points  Rank    Team  Year
    6     756     1   Kings  2016
    8     694     2  Riders  2016
    2017
        Points  Rank    Team  Year
    7      788     1   Kings  2017
    11     690     2  Riders  2017
    使用get_group()方法,可以选择一个组:
    =======================================
       Points  Rank    Team  Year
    0     876     1  Riders  2014
    2     863     2  Devils  2014
    4     741     3   Kings  2014
    9     701     4  Royals  2014
    =======================================
    Year
    2014    795.25
    2015    769.50
    2016    725.00
    2017    739.00
    Name: Points, dtype: float64
    另一种查看每个分组的大小的方法是应用size()函数:
    =======================================
            Points  Rank  Year
    Team                      
    Devils       2     2     2
    Kings        3     3     3
    Riders       4     4     4
    Royals       2     2     2
    kings        1     1     1
    通过分组系列,还可以传递函数的列表或字典来进行聚合:
    =======================================
             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
    分组或列上的转换返回索引大小与被分组的索引相同的对象。因此,转换应该返回与组块大小相同的结果。:
    =======================================
           Points       Rank       Year
    0   12.843272 -15.000000 -11.618950
    1    3.020286   5.000000  -3.872983
    2    7.071068  -7.071068  -7.071068
    3   -7.071068   7.071068   7.071068
    4   -8.608621  11.547005 -10.910895
    5         NaN        NaN        NaN
    6   -2.360428  -5.773503   2.182179
    7   10.969049  -5.773503   8.728716
    8   -7.705963   5.000000   3.872983
    9   -7.071068   7.071068  -7.071068
    10   7.071068  -7.071068   7.071068
    11  -8.157595   5.000000  11.618950
    =======================================
    过滤根据定义的标准过滤数据并返回数据的子集。filter()函数用于过滤数据:
        Points  Rank    Team  Year
    0      876     1  Riders  2014
    1      789     2  Riders  2015
    4      741     3   Kings  2014
    6      756     1   Kings  2016
    7      788     1   Kings  2017
    8      694     2  Riders  2016
    11     690     2  Riders  2017
    =======================================
    
    Process finished with exit code 0
  • 相关阅读:
    Druid数据库密码加密
    jenkins 构建时不能自动结束的问题
    4、TypeScript 类
    3、TypeScript 函数
    2、Typescript 中的数据类型
    1、TypeScript安装、开发工具
    Markdown 基本格式
    解决邮箱下载下来的word打不开的问题
    winform在禁用控件上显示工具提示
    日常问题集
  • 原文地址:https://www.cnblogs.com/ggzhangxiaochao/p/9094293.html
Copyright © 2011-2022 走看看