在具有多个功能的groupby.agg中传递参数

发布于 2021-01-29 14:10:05

有谁知道如何在具有 多个 功能的groupby.agg()中传递参数?

最重要的是,我想将其与自定义函数一起使用,但是我将使用需要参数的内置函数来询问我的问题。

假设:

import pandas as pd
import numpy as np
import datetime
np.random.seed(15)
day = datetime.date.today()
day_1 = datetime.date.today() - datetime.timedelta(1)
day_2 = datetime.date.today() - datetime.timedelta(2)
day_3 = datetime.date.today() - datetime.timedelta(3)
ticker_date = [('fi', day), ('fi', day_1), ('fi', day_2), ('fi', day_3),
               ('di', day), ('di', day_1), ('di', day_2), ('di', day_3)]
index_df = pd.MultiIndex.from_tuples(ticker_date, names=['lvl_1', 'lvl_2'])
df = pd.DataFrame(np.random.rand(8), index_df, ['value'])

我该怎么做:

df.groupby('lvl_1').agg(['min','max','quantile'])

作为“分位数”的参数:

q = 0.22
关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用lambda功能:

    q = 0.22
    df1 = df.groupby('lvl_1')['value'].agg(['min','max',lambda x: x.quantile(q)])
    print (df1)
                min       max  <lambda>
    lvl_1                              
    di     0.275401  0.530000  0.294589
    fi     0.054363  0.848818  0.136555
    

    或者可以创建f函数并将其名称设置为自定义列名称:

    q = 0.22
    f = lambda x: x.quantile(q)
    f.__name__ = 'custom_quantile'
    df1 = df.groupby('lvl_1')['value'].agg(['min','max',f])
    print (df1)
                min       max  custom_quantile
    lvl_1                                     
    di     0.275401  0.530000         0.294589
    fi     0.054363  0.848818         0.136555
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看