给数据分个班

1、对数据进行分组
    单列分组
        Pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作
        而进行分组之后是一个DataFrameGroupBy object,是一个分组后的对象
            df.groupby("gender")

        但是因为分组之后是一个DataFrameGroupBy object对象,所以可以使用groupby中的size方法查看分组后每组的
        数量,并返回一个含有分组大小的Series:
            df.groupby("gender").size()

        同样我们也可以根据某一个列名对另外一个列进行分组,之后使用get_group()函数根据分组后的名字进行分组,例如:
            我们通过性别gender,只对age列数据进行分组
            group = df['age'].groupby(df['gender'])
            # 查看分组
            print(group.groups)
            # 根据分组后的名字选择分组
            print(group.get_group('F'))

        对分组之后的数据进行遍历:
            import pandas as pd
            df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
            groups = df.groupby('gender')
            for group_name,group_df in groups:
                print(group_name,group_df.shape)
    多列分组
        在pandas中对于数据进行分组可以实现多列分组,当需要按多列进行分组的时候,groupby方法里面我们
        传入的一个列表,列表中分别存储分组依据的列名
        示例:
            import pandas as pd
            df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
            group=df.groupby(['country','gender'])
            df1 = group.size()
            print(df1)

        注意:列表中列名的顺序,确定了先按country列进行分组,然后再按gender列分组。不同的顺序,产生的分组
        名字是不同的

        **group.size()返回的结果中发现索引值是多层的,那么对于多层索引的值我们如何去获取呢?:
            import pandas as pd
            df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
            group=df.groupby(['country','gender'])
            df1 = group.size()
            size = df1['Austria']['F']
            print(size)

2、对分组后的数据进行统计
    数据统计(也称为数据聚合)是数据处理的最后一步,通常是要使每一个数组生成一个单一的值
    在pandas中提供了很多的统计函数,例如:mean()、max()、min()等函数
    为了数据统计起来更加方便灵活,pandas提供了一个agg()方法来对分组之后的数据进行统计
    示例:
        import pandas as pd
        df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
        groups = df.groupby('gender')
        for group_name,group_df in groups:
            f_se = group_df['age'].agg(['max','min','mean'])
            print('{}组的最大年龄是{},最小年龄是{},平均年龄是{}'.format(group_name,f_se[0],f_se[1],f_se[2]))

    当然在pandas中的函数也不是万能的,如果我们需要计算最大值以及最小值的差值,这样的话我们可以自定义一个函数
    来进行计算,之后把函数名放在agg函数后面括号的列表中,示例:
        import pandas as pd
        df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
        groups = df.groupby('gender')
        def peak_range(df):
            """
                返回数值范围
            """
            return df.max() - df.min()
        for group_name,group_df in groups:
            f_se = group_df['age'].agg(['max','min','mean',peak_range])
            print(f_se[0],f_se[1],f_se[3])

        注意:peak_range(df)函数是我们自定的函数,并设置了一个df参数,为了接收group_df['age']的值,自定义的函数
        名字在传入agg()函数中时不需要转换成字符串

大数据组组织架构 大数据团队分组_多列

大数据组组织架构 大数据团队分组_数据_02