我想要一个函数,它接受一个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函数作为参数?你知道吗
你想通过什么都可以,只要它能很好地为你服务。 您可以将函数的agr作为额外的dict/tuple参数传递,也可以只使用*args和**kwargs。你知道吗
不过,现在还不清楚你想在这里实现什么。 首先,它看起来像是在处理函数中的
data
和df
。 第二,如果我理解正确的话,pd.core.groupby.GroupBy
是一个数据对象的类-它是从df.groupby
得到的,而不是相反。因此,你不应该在这里使用它。你知道吗但是,您可以简单地将字符串或agg函数作为参数传递,然后在
.agg
方法中应用它们:通过这种方式,您可以将字符串('mean','sum')或数组,或dict,甚至函数传递到
agg
参数中。此外,在这种情况下,数组将导致将数组中的所有函数应用于所有列,因此不必联接也不必循环。你知道吗要了解
groupby
如何工作的更多信息,请看这里,例如: https://chrisalbon.com/python/pandas_apply_operations_to_groups.html相关问题 更多 >
编程相关推荐