Pandas DataFrame分组求和、分组乘积的实例

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

总结

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容