gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:15 25 4
gpt4 key购买 nike

我想要一个采用 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 操作的函数,并让我在必要时传递参数。

顺便问一下,传递 pandas.GroupBy 函数作为参数可以吗?

最佳答案

传递任何你想要的东西都是可以的,只要它有效并且能很好地为你服务。您可以将函数的 agrs 作为附加的 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')或数组,或字典,甚至函数传递到agg参数中。此外,在这种情况下,数组将导致将数组中的所有函数应用于所有列,因此您不必加入,也不必循环。

要了解有关 groupby 工作原理的更多信息,请查看此处,例如: https://chrisalbon.com/python/pandas_apply_operations_to_groups.html

关于python - 在 python 函数中将 pandas GroupBy 函数作为参数传递可以吗?我应该如何传递他们的论点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47681739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com