PandasDataFrame分组求和、分组乘积的实例,


目录
  • Pandas DataFrame分组求和、分组乘积
  • DataFrame group分组(单列分组、多列分组、分组统计、迭代、聚合计算)
    • 分组
  • 总结

    Pandas DataFrame分组求和、分组乘积

    import numpy as np
    import pandas as pd
    pd.set_option('display.max_columns', 10)
    
    # 删除空数据
    def DropNan(data_qd):
        for i in range(len(data_qd)):
            if np.isnan(data_qd['test_uniq_cnt'][i]) or \
                    np.isnan(data_qd['fail_uniq_cnt'][i]):
                data_qd = data_qd.drop(i)
        return data_qd
    
    
    def GetGroupSum(df, lst_merge):
        pop_group = df.groupby(lst_merge).sum().reset_index().\
            rename(columns = {'test_uniq_cnt':'sum_test_cnt','fail_uniq_cnt':'sum_fail_cnt'})
        pop_group['Percentofpass'] = pop_group.\
            apply(lambda x: -99999 if x.sum_test_cnt == 0 or np.isnan(x.sum_test_cnt) or np.isnan(x.sum_fail_cnt) \
            else 1 - float(x.sum_fail_cnt)/x.sum_test_cnt, axis = 1)
    
        return pop_group
    
    
    def GetGroupProd(df, lst_group):
        fpy_group = df.groupby(lst_group).\
            apply(lambda x: '无生产' if x['Percentofpass'].max(axis = 0) < 0 \
            else 'NA' if x['Percentofpass'].min(axis = 0) < 0 \
            else x['Percentofpass'].cumprod(axis = 0).iloc[-1]).reset_index()
        fpy_group.columns = lst_group + ['fpy']
        return fpy_group
    

    DataFrame group分组(单列分组、多列分组、分组统计、迭代、聚合计算)

    pandas - DataFrame

    分组

    def dataFormatGroup():
        """
        分组统计
        :return:
        """
        # 解决数据输出时列名不对齐的问题
        pd.set_option('display.unicode.ambiguous_as_wide', True)
        pd.set_option('display.unicode.east_asian_width', True)
    
        data = [
            ["组织结构-1", "组织结构-1-1", 11, 12],
            ["组织结构-1", "组织结构-1-2", 11, 12],
            ["组织结构-1", "组织结构-1-3", 11, 12],
            ["组织结构-1", "组织结构-1-3", 13, 14],
            ["组织结构-2", "组织结构-2-1", 21, 22],
            ["组织结构-2", "组织结构-2-1", 21, 22],
            ["组织结构-2", "组织结构-2-3", 21, 22],
            ["组织结构-3", "组织结构-3-1", 31, 32],
            ["组织结构-3", "组织结构-3-1", 31, 32],
            ["组织结构-3", "组织结构-3-3", 31, 32],
            ["组织结构-4", "组织结构-4-1", 41, 42],
            ["组织结构-4", "组织结构-4-1", 41, 42],
            ["组织结构-4", "组织结构-4-3", 41, 42]
        ]
        columns = ['一级单位', '二级单位', '男员工人数', '女员工人数']
    
        df = pd.DataFrame(data=data, columns=columns)
    
        # 按单列进行分组统计
        group_one_org = df.groupby('一级单位').sum()
        print(group_one_org)
    
        # 按多列进行分组统计
        group_two_org = df.groupby(['一级单位', '二级单位']).sum()
        print(group_two_org)
    
        # 按单列进行分组统计,并统计男员工人数
        group_one_org_by_man = df.groupby(['一级单位'])["男员工人数"].sum()
        print(group_one_org_by_man)
    
        # 迭代
        groups = df.groupby(['一级单位'])
        for name, group in groups:
            print(name)
            print(group)
    
        # 聚合函数 (平均、求和、最大、最小)
        agg_1 = df.groupby("一级单位").agg(['mean', 'sum', 'max', 'min'])
        print(agg_1)
    
        # 聚合函数 分列聚合计算
        agg_2 = df.groupby("一级单位").agg({'男员工人数': ['mean', 'sum'], '女员工人数': ['max', 'min']})
        print(agg_2)
    	
    	 # 求和分组并排序(ascending True 升序 False 降序)
    	 group_and_num = df.assign(sum=df.sum(axis=1)).groupby(['一级单位', '二级单位']).sum().sort_values("sum", ascending=True)
    	 print(group_and_num)
    
    

    原始数据:

    	      一级单位      二级单位    男员工人数   女员工人数
    	0   组织结构-1  组织结构-1-1          11          12
    	1   组织结构-1  组织结构-1-2          11          12
    	2   组织结构-1  组织结构-1-3          11          12
    	3   组织结构-1  组织结构-1-3          13          14
    	4   组织结构-2  组织结构-2-1          21          22
    	5   组织结构-2  组织结构-2-1          21          22
    	6   组织结构-2  组织结构-2-3          21          22
    	7   组织结构-3  组织结构-3-1          31          32
    	8   组织结构-3  组织结构-3-1          31          32
    	9   组织结构-3  组织结构-3-3          31          32
    	10  组织结构-4  组织结构-4-1          41          42
    	11  组织结构-4  组织结构-4-1          41          42
    	12  组织结构-4  组织结构-4-3          41          42
    

    group_one_org 按单列进行分组统计 返回结果:

               		 男员工人数   女员工人数
    	一级单位                          
    	组织结构-1          46          50
    	组织结构-2          63          66
    	组织结构-3          93          96
    	组织结构-4         123         126
    

    ** group_two_org 按多列进行分组统计 返回结果:**

              			   			 男员工人数  	女员工人数
    	  一级单位  		二级单位                            
    	组织结构-1 	组织结构-1-1          11          12
    	            组织结构-1-2          11          12
    	            组织结构-1-3          24          26
    	组织结构-2	组织结构-2-1          42          44
    	            组织结构-2-3          21          22
    	组织结构-3 	组织结构-3-1          62          64
    	            组织结构-3-3          31          32
    	组织结构-4 	组织结构-4-1          82          84
    	            组织结构-4-3          41          42
    

    group_one_org_by_man 按单列进行分组统计,并统计男员工人数 返回结果:

    	一级单位
    	组织结构-1     46
    	组织结构-2     63
    	组织结构-3     93
    	组织结构-4    123
    	Name: 男员工人数, dtype: int64
    

    groups 迭代 返回结果:

    组织结构-1
    	     一级单位      二级单位  男员工人数  女员工人数
    	0  组织结构-1  组织结构-1-1          11          12
    	1  组织结构-1  组织结构-1-2          11          12
    	2  组织结构-1  组织结构-1-3          11          12
    	3  组织结构-1  组织结构-1-3          13          14
    	
    	组织结构-2
    	     一级单位      二级单位  男员工人数  女员工人数
    	4  组织结构-2  组织结构-2-1          21          22
    	5  组织结构-2  组织结构-2-1          21          22
    	6  组织结构-2  组织结构-2-3          21          22
    	
    	组织结构-3
    	     一级单位      二级单位  男员工人数  女员工人数
    	7  组织结构-3  组织结构-3-1          31          32
    	8  组织结构-3  组织结构-3-1          31          32
    	9  组织结构-3  组织结构-3-3          31          32
    	
    	组织结构-4
    	      一级单位      二级单位  男员工人数  女员工人数
    	10  组织结构-4  组织结构-4-1          41          42
    	11  组织结构-4  组织结构-4-1          41          42
    	12  组织结构-4  组织结构-4-3          41          42
    

    agg_1 聚合函数 (平均、求和、最大、最小) 返回结果:

    						 男员工人数              女员工人数             
    	                 mean  sum max min       mean  sum max min
    	一级单位                                                  
    	组织结构-1       11.5   46  13  11       12.5   50  14  12
    	组织结构-2       21.0   63  21  21       22.0   66  22  22
    	组织结构-3       31.0   93  31  31       32.0   96  32  32
    	组织结构-4       41.0  123  41  41       42.0  126  42  42
    

    agg_2 聚合函数 分列聚合计算 返回结果:

    	                男员工人数      女员工人数    
    	                 mean  sum        max min
    	一级单位                                 
    	组织结构-1       11.5   46         14  12
    	组织结构-2       21.0   63         22  22
    	组织结构-3       31.0   93         32  32
    	组织结构-4       41.0  123         42  42
    

    求和分组并排序(ascending True 升序 False 降序) 返回结果:

    	        						男员工人数  女员工人数  sum
    	一级单位      二级单位                                  
    	组织结构-1    组织结构-1-1          11          12       23
    	             组织结构-1-2          11          12       23
    	组织结构-2    组织结构-2-3          21          22       43
    	组织结构-1    组织结构-1-3          24          26       50
    	组织结构-3    组织结构-3-3          31          32       63
    	组织结构-4    组织结构-4-3          41          42       83
    	组织结构-2    组织结构-2-1          42          44       86
    	组织结构-3    组织结构-3-1          62          64      126
    	组织结构-4    组织结构-4-1          82          84      166
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • pandas报错AttributeError: DataFrame object has no attribute ix问题
    • pandas dataframe统计填充空值方式
    • Python数据分析:pandas中Dataframe的groupby与索引用法
    • pandas DataFrame.to_sql()用法小结
    • pandas如何实现两个dataframe相减
    • Pandas实现复制dataframe中的每一行

    评论关闭