【问题标题】:Passing argument in groupby.agg with multiple functions使用多个函数在 groupby.agg 中传递参数
【发布时间】:2018-07-28 08:57:12
【问题描述】:

任何人都知道如何使用 多个 函数在 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 

【问题讨论】:

    标签: python pandas group-by aggregate


    【解决方案1】:
    df1 = df.groupby('lvl_1')['value'].agg(['min','max',("custom_quantile",lambda x: x.quantile(q))])
    

    对于 q=0.22,输出为:

           min      max         custom_quantile
    lvl_1           
    di     0.275401 0.530000    0.294589
    fi     0.054363 0.848818    0.136555
    

    【讨论】:

    • 我怀疑这是否有帮助,甚至根本没有用。为了说服我,请解释这是如何工作的以及为什么它应该有所帮助。
    • 它可以工作(编辑输出),并且类似于 jerzael 答案中的第一个选项,尽管它更好一些(命名列内联)。
    • 感谢提供使“它有效,诚实”更合理的输出。然而,解释它是如何工作的以及为什么它应该有所帮助会更好。 StackOverflow 是关于分享知识和帮助人们理解的。不是为了提供代码来解决问题(无论是否经过测试)。请帮助消除 StackOverflow 是一个寻找无偿程序员为他人工作的平台的误解。
    【解决方案2】:

    使用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
    

    【讨论】:

    • 太棒了,你第二次帮助我了!我喜欢第二个选项,因为它对我有很大帮助,因为我希望设置自定义函数!谢谢老哥
    • 创建命名 lambda 或仅使用 def 语句有实际区别吗?
    • @RedPanda - 在我看来def 更常见,但与某些exceptions 相同
    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 2019-06-10
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多