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
暂无评论内容