小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【Python】Pandas技巧:groupby agg/transform

 520jefferson 2022-10-29 發(fā)布于北京

公眾號:尤而小屋
作者:Peter
編輯:Peter

本文介紹的是分組groupby分組之后如何使用agg和transform

圖片

模擬數(shù)據(jù)

import pandas as pd
import numpy as np
employees = ['小明','小周','小孫','小王','小張']   # 5位員工
time = ['上半年''下半年']


df=pd.DataFrame({
    'employees':np.random.choice(employees,10),  # 在員工中重復(fù)選擇10次
    # 另一種寫法
    #'employees':[employees[x] for x in np.random.randint(0,len(employees),10)],  
    'time':np.random.choice(time,10),
    'salary':np.random.randint(800,1000,10),  # 800-1000之間的薪資選擇10個數(shù)值
    'score':np.random.randint(6,12,10)  # 6-11的分?jǐn)?shù)選擇10個
})

df

employeestimesalaryscore
0小周上半年87311
1小王下半年81810
2小王下半年8046
3小張下半年8117
4小張上半年95510
5小張上半年97511
6小明上半年8589
7小明上半年99311
8小王上半年8418
9小王下半年9677

groupby+單個字段+單個聚合

求解每個人的總薪資金額:

total_salary = df.groupby('employees')['salary'].sum().reset_index()
total_salary

employeessalary
0小周873
1小張2741
2小明1851
3小王3430

使用agg也能夠?qū)崿F(xiàn)上面的效果:

df.groupby('employees').agg({'salary':'sum'}).reset_index()

employeessalary
0小周873
1小張2741
2小明1851
3小王3430
df.groupby('employees').agg({'salary':np.sum}).reset_index()

employeessalary
0小周873
1小張2741
2小明1851
3小王3430

groupby+單個字段+多個聚合

求解每個人的總薪資金額和薪資的平均數(shù)

方法1:使用groupby+merge

mean_salary = df.groupby('employees')['salary'].mean().reset_index()
mean_salary

employeessalary
0小周873.000000
1小張913.666667
2小明925.500000
3小王857.500000

然后將上面的兩個結(jié)果進(jìn)行組合;在合并之前為了字段的名字更加的直觀,我們重命名下:

total_salary.rename(columns={'employees':'total_salary'})
mean_salary.columns = ['employees','mean_salary']
total_mean = total_salary.merge(mean_salary)
total_mean

employeessalarymean_salary
0小周873873.000000
1小張2741913.666667
2小明1851925.500000
3小王3430857.500000

方法2:使用groupby+agg

total_mean = df.groupby('employees')\
            .agg(total_salary=('salary''sum'), 
                 mean_salary=('salary''mean'))\
            .reset_index()
total_mean

employeestotal_salarymean_salary
0小周873873.000000
1小張2741913.666667
2小明1851925.500000
3小王3430857.500000

groupby+多個字段+單個聚合

針對多個字段的同時聚合:

df.groupby(['employees','time'])['salary'].sum().reset_index()

employeestimesalary
0小周上半年873
1小張上半年1930
2小張下半年811
3小明上半年1851
4小王上半年841
5小王下半年2589
# 使用agg來實現(xiàn)

df.groupby(['employees','time']).agg({'salary':'sum'}).reset_index()

employeestimesalary
0小周上半年873
1小張上半年1930
2小張下半年811
3小明上半年1851
4小王上半年841
5小王下半年2589

groupby+多個字段+多個聚合

使用的方法是:

agg(’新列名'=(’原列名', ’統(tǒng)計函數(shù)/方法'))
df.groupby(['employees','time'])\
            .agg(total_salary=('salary''sum'), 
                mean_salary=('salary''mean'),
                total_score=('score''sum'
                )\
            .reset_index()

employeestimetotal_salarymean_salarytotal_score
0小周上半年873873.011
1小張上半年1930965.021
2小張下半年811811.07
3小明上半年1851925.520
4小王上半年841841.08
5小王下半年2589863.023

groupby+transform

關(guān)于transform函數(shù)的使用請參考(建議一定要看):Pandas高階函數(shù)transform使用機制

Pandas高級函數(shù)transform使用指南

一張關(guān)于transform函數(shù)的備忘錄:

圖片

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多