平时聚合都是求和,计数等
    apply如何应用在聚合函数上边?

    1. import pandas as pd
    2. position = pd.read_csv('position.csv')
    3. company = pd.read_csv('company_sql.csv',encoding='gbk')
    4. # 不同城市下面薪资排名前五的职位
    5. # position.groupby('city') 对城市分组之后,每个城市都会对应一个数据框
    6. # position.groupby('city').count() 对城市进行分组后计数
    7. # apply运用在分组之后,会对形式进行一个小变化,又把分开的数据框合并到了一起
    8. def func(x):
    9. r = x.sort_values('avg',ascending=False)
    10. return r[:5]
    11. position.groupby('city').apply(func)
    12. # ascending=False降序;反之升序
    13. position.sort_values('avg',ascending=False)[0:5]
    14. # 根据参数返回行数
    15. # 比如:变成升序,返回n行(n可取3,4,5等)
    16. # func(x,n,asc=False),func里面可设置asc=False为默认参数
    17. def func(x,n,asc=False):
    18. r = x.sort_values('avg',ascending = asc)
    19. return r[:n]
    20. # r[:n]这里原本返回一行的,变成了返回n行
    21. # 但是agg里面只能返回一行,如果将自定义函数func应用到agg里面,则会报错
    22. # apply(func,n=3,asc=True)里面可改变设置的默认参数asc
    23. position.groupby('city').apply(func,n=3,asc=True)

    agg与apply的区别:
    (1)agg对聚合后的结果进行函数运用,不涉及形状变换,最后返回一行结果
    (2)apply不管数据框之前什么样子,拆分 → 自定义函数筛选 → 整合

    1. # apply和agg相比,apply的灵活性更高
    2. # 分组之后求和:position.groupby('city').agg(sum)
    3. # 分组之后求平均:position.groupby('city').agg('mean') = position.groupby('city').mean()
    4. position.groupby('city').mean()
    5. # agg也有一些高级的用法,可以同时运用多个函数
    6. position.groupby('city').agg(['sum','mean'])
    7. # agg使用自定义函数也可以(不涉及形状变换,最后返回一行结果)
    8. position.groupby('city').agg(lambda x:max(x)-min(x))