在python函数中传递GroupBy函数作为参数可以吗?我该如何传递他们的论点呢?

2024-04-20 07:59:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个函数,它接受一个GroupBy操作,比如mean(),max()作为参数。我不知道如何包含这些函数的参数。例如,在分位数的情况下,有一个参数用来判断哪个分位数,所以在这种情况下,我应该能够提供这个额外的参数。你知道吗

def compute_moment(data, moment = pd.core.groupby.GroupBy.mean):

    # This builds columns that we will use to group.
    group_data = data.rank(pct = True).round(1).add_suffix('_grouper')
    df = data.join(group_data)

    out = []
    for col in data.columns:
        #This is the key step, what if I want moment to be, say quantile(q = .7)?
        x = df.groupby(col+'_grouper').mean()[col] #no problem here
        y = moment(df.groupby(col+'_grouper'))['y']

        out += [pd.concat([x, y], axis=1)]

    return out

>>> out = compute_moment(data, pd.core.groupby.GroupBy.mean)

#output is a list of dataframes like this one:
>>> print out[0]

              rho         y
rho_grouper                    
0.0          0.024998  0.035754
0.1          0.099908  0.036522
0.2          0.199903  0.032319
0.3          0.299908  0.038726
0.4          0.399907  0.034523
0.5          0.499907  0.031123
0.6          0.599909  0.031352
0.7          0.699908  0.030531
0.8          0.799902  0.031277
0.9          0.899904  0.028456
1.0          0.974912  0.029378

我想知道如何正确地执行此操作,或者为什么不使用一个更简单的替代方法,即使用一个应用这些groupby操作的函数,并允许我在必要时传递参数。你知道吗

顺便问一下,通过考试可以吗熊猫.GroupBy函数作为参数?你知道吗


Tags: 函数dfdata参数group情况colout
1条回答
网友
1楼 · 发布于 2024-04-20 07:59:54

你想通过什么都可以,只要它能很好地为你服务。 您可以将函数的agr作为额外的dict/tuple参数传递,也可以只使用*args和**kwargs。你知道吗

不过,现在还不清楚你想在这里实现什么。 首先,它看起来像是在处理函数中的datadf。 第二,如果我理解正确的话,pd.core.groupby.GroupBy是一个数据对象的类-它是从df.groupby得到的,而不是相反。因此,你不应该在这里使用它。你知道吗

但是,您可以简单地将字符串或agg函数作为参数传递,然后在.agg方法中应用它们:

def foo(df, agg='mean'):
    momentum = df.groupby('grouper').agg(agg)

通过这种方式,您可以将字符串('mean','sum')或数组,或dict,甚至函数传递到agg参数中。此外,在这种情况下,数组将导致将数组中的所有函数应用于所有列,因此不必联接也不必循环。你知道吗

要了解groupby如何工作的更多信息,请看这里,例如: https://chrisalbon.com/python/pandas_apply_operations_to_groups.html

相关问题 更多 >