Pandas DataFrame分組求和、分組乘積的實(shí)例
Pandas DataFrame分組求和、分組乘積
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', 10)
# 刪除空數(shù)據(jù)
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: '無生產(chǎn)' 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分組(單列分組、多列分組、分組統(tǒng)計(jì)、迭代、聚合計(jì)算)
pandas - DataFrame
分組
def dataFormatGroup():
"""
分組統(tǒng)計(jì)
:return:
"""
# 解決數(shù)據(jù)輸出時(shí)列名不對齊的問題
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
data = [
["組織結(jié)構(gòu)-1", "組織結(jié)構(gòu)-1-1", 11, 12],
["組織結(jié)構(gòu)-1", "組織結(jié)構(gòu)-1-2", 11, 12],
["組織結(jié)構(gòu)-1", "組織結(jié)構(gòu)-1-3", 11, 12],
["組織結(jié)構(gòu)-1", "組織結(jié)構(gòu)-1-3", 13, 14],
["組織結(jié)構(gòu)-2", "組織結(jié)構(gòu)-2-1", 21, 22],
["組織結(jié)構(gòu)-2", "組織結(jié)構(gòu)-2-1", 21, 22],
["組織結(jié)構(gòu)-2", "組織結(jié)構(gòu)-2-3", 21, 22],
["組織結(jié)構(gòu)-3", "組織結(jié)構(gòu)-3-1", 31, 32],
["組織結(jié)構(gòu)-3", "組織結(jié)構(gòu)-3-1", 31, 32],
["組織結(jié)構(gòu)-3", "組織結(jié)構(gòu)-3-3", 31, 32],
["組織結(jié)構(gòu)-4", "組織結(jié)構(gòu)-4-1", 41, 42],
["組織結(jié)構(gòu)-4", "組織結(jié)構(gòu)-4-1", 41, 42],
["組織結(jié)構(gòu)-4", "組織結(jié)構(gòu)-4-3", 41, 42]
]
columns = ['一級(jí)單位', '二級(jí)單位', '男員工人數(shù)', '女員工人數(shù)']
df = pd.DataFrame(data=data, columns=columns)
# 按單列進(jìn)行分組統(tǒng)計(jì)
group_one_org = df.groupby('一級(jí)單位').sum()
print(group_one_org)
# 按多列進(jìn)行分組統(tǒng)計(jì)
group_two_org = df.groupby(['一級(jí)單位', '二級(jí)單位']).sum()
print(group_two_org)
# 按單列進(jìn)行分組統(tǒng)計(jì),并統(tǒng)計(jì)男員工人數(shù)
group_one_org_by_man = df.groupby(['一級(jí)單位'])["男員工人數(shù)"].sum()
print(group_one_org_by_man)
# 迭代
groups = df.groupby(['一級(jí)單位'])
for name, group in groups:
print(name)
print(group)
# 聚合函數(shù) (平均、求和、最大、最小)
agg_1 = df.groupby("一級(jí)單位").agg(['mean', 'sum', 'max', 'min'])
print(agg_1)
# 聚合函數(shù) 分列聚合計(jì)算
agg_2 = df.groupby("一級(jí)單位").agg({'男員工人數(shù)': ['mean', 'sum'], '女員工人數(shù)': ['max', 'min']})
print(agg_2)
# 求和分組并排序(ascending True 升序 False 降序)
group_and_num = df.assign(sum=df.sum(axis=1)).groupby(['一級(jí)單位', '二級(jí)單位']).sum().sort_values("sum", ascending=True)
print(group_and_num)
原始數(shù)據(jù):
一級(jí)單位 二級(jí)單位 男員工人數(shù) 女員工人數(shù) 0 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-1 11 12 1 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-2 11 12 2 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-3 11 12 3 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-3 13 14 4 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-1 21 22 5 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-1 21 22 6 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-3 21 22 7 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-1 31 32 8 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-1 31 32 9 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-3 31 32 10 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-1 41 42 11 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-1 41 42 12 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-3 41 42
group_one_org 按單列進(jìn)行分組統(tǒng)計(jì) 返回結(jié)果:
男員工人數(shù) 女員工人數(shù) 一級(jí)單位 組織結(jié)構(gòu)-1 46 50 組織結(jié)構(gòu)-2 63 66 組織結(jié)構(gòu)-3 93 96 組織結(jié)構(gòu)-4 123 126
** group_two_org 按多列進(jìn)行分組統(tǒng)計(jì) 返回結(jié)果:**
男員工人數(shù) 女員工人數(shù) 一級(jí)單位 二級(jí)單位 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-1 11 12 組織結(jié)構(gòu)-1-2 11 12 組織結(jié)構(gòu)-1-3 24 26 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-1 42 44 組織結(jié)構(gòu)-2-3 21 22 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-1 62 64 組織結(jié)構(gòu)-3-3 31 32 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-1 82 84 組織結(jié)構(gòu)-4-3 41 42
group_one_org_by_man 按單列進(jìn)行分組統(tǒng)計(jì),并統(tǒng)計(jì)男員工人數(shù) 返回結(jié)果:
一級(jí)單位 組織結(jié)構(gòu)-1 46 組織結(jié)構(gòu)-2 63 組織結(jié)構(gòu)-3 93 組織結(jié)構(gòu)-4 123 Name: 男員工人數(shù), dtype: int64
groups 迭代 返回結(jié)果:
組織結(jié)構(gòu)-1 一級(jí)單位 二級(jí)單位 男員工人數(shù) 女員工人數(shù) 0 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-1 11 12 1 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-2 11 12 2 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-3 11 12 3 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-3 13 14 組織結(jié)構(gòu)-2 一級(jí)單位 二級(jí)單位 男員工人數(shù) 女員工人數(shù) 4 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-1 21 22 5 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-1 21 22 6 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-3 21 22 組織結(jié)構(gòu)-3 一級(jí)單位 二級(jí)單位 男員工人數(shù) 女員工人數(shù) 7 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-1 31 32 8 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-1 31 32 9 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-3 31 32 組織結(jié)構(gòu)-4 一級(jí)單位 二級(jí)單位 男員工人數(shù) 女員工人數(shù) 10 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-1 41 42 11 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-1 41 42 12 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-3 41 42
agg_1 聚合函數(shù) (平均、求和、最大、最小) 返回結(jié)果:
男員工人數(shù) 女員工人數(shù) mean sum max min mean sum max min 一級(jí)單位 組織結(jié)構(gòu)-1 11.5 46 13 11 12.5 50 14 12 組織結(jié)構(gòu)-2 21.0 63 21 21 22.0 66 22 22 組織結(jié)構(gòu)-3 31.0 93 31 31 32.0 96 32 32 組織結(jié)構(gòu)-4 41.0 123 41 41 42.0 126 42 42
agg_2 聚合函數(shù) 分列聚合計(jì)算 返回結(jié)果:
男員工人數(shù) 女員工人數(shù) mean sum max min 一級(jí)單位 組織結(jié)構(gòu)-1 11.5 46 14 12 組織結(jié)構(gòu)-2 21.0 63 22 22 組織結(jié)構(gòu)-3 31.0 93 32 32 組織結(jié)構(gòu)-4 41.0 123 42 42
求和分組并排序(ascending True 升序 False 降序) 返回結(jié)果:
男員工人數(shù) 女員工人數(shù) sum 一級(jí)單位 二級(jí)單位 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-1 11 12 23 組織結(jié)構(gòu)-1-2 11 12 23 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-3 21 22 43 組織結(jié)構(gòu)-1 組織結(jié)構(gòu)-1-3 24 26 50 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-3 31 32 63 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-3 41 42 83 組織結(jié)構(gòu)-2 組織結(jié)構(gòu)-2-1 42 44 86 組織結(jié)構(gòu)-3 組織結(jié)構(gòu)-3-1 62 64 126 組織結(jié)構(gòu)-4 組織結(jié)構(gòu)-4-1 82 84 166
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python產(chǎn)生模擬數(shù)據(jù)faker庫的使用詳解
這篇文章主要介紹了python產(chǎn)生模擬數(shù)據(jù)faker庫的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
python tkinter Entry控件的焦點(diǎn)移動(dòng)操作
這篇文章主要介紹了python tkinter Entry控件的焦點(diǎn)移動(dòng)操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
python實(shí)現(xiàn)FTP文件傳輸?shù)姆椒ǎǚ?wù)器端和客戶端)
FTP(File Transfer Protocol,文件傳輸協(xié)議) 是 TCP/IP 協(xié)議組中的協(xié)議之一。接下來通過本文給大家介紹關(guān)于python實(shí)現(xiàn)FTP文件傳輸?shù)南嚓P(guān)知識(shí)(服務(wù)器端和客戶端) ,需要的朋友可以參考下2020-03-03
教你怎么用Python操作MySql數(shù)據(jù)庫
很多小伙伴都在問我能不能出一篇怎么用Python操作MySql數(shù)據(jù)庫的教程,今天特地整理了本篇文章,文中有非常詳細(xì)的圖文示例,需要的朋友可以參考下2021-05-05

