Pandas DataFrame分組求和、分組乘積的實例
更新時間:2024年02月22日 09:44:22 作者:skyHdd
這篇文章主要介紹了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分組(單列分組、多列分組、分組統(tǒng)計、迭代、聚合計算)
pandas - DataFrame
分組
def dataFormatGroup(): """ 分組統(tǒng)計 :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) # 按單列進行分組統(tǒng)計 group_one_org = df.groupby('一級單位').sum() print(group_one_org) # 按多列進行分組統(tǒng)計 group_two_org = df.groupby(['一級單位', '二級單位']).sum() print(group_two_org) # 按單列進行分組統(tǒng)計,并統(tǒng)計男員工人數 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 按單列進行分組統(tǒng)計 返回結果:
男員工人數 女員工人數 一級單位 組織結構-1 46 50 組織結構-2 63 66 組織結構-3 93 96 組織結構-4 123 126
** group_two_org 按多列進行分組統(tǒng)計 返回結果:**
男員工人數 女員工人數 一級單位 二級單位 組織結構-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 按單列進行分組統(tǒng)計,并統(tǒng)計男員工人數 返回結果:
一級單位 組織結構-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
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。