pandas - DataFrame
1、 分组
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