mean()、max()などのGroupBy操作を引数として取る関数が必要です。これらの関数の引数をどのように含めるかについてはわかりません。例えば、クォンタイルの場合は、どのクォンタイルを伝えるかという議論があります。このような場合、この余分な議論を提供できるはずです。python関数でpandas GroupBy関数を引数として渡すことはできますか?どのように私は彼らの議論を通過する必要がありますか?
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関数を渡しても問題ありませんか?
は答えをありがとうございました。 groupby関数( 'pd.core.groupby.GroupBy.mean')のフルネームを書く必要がありました。なぜなら、' mean'を書くだけで_meanが定義されていないと言えるからです。 私の質問は、 'mean'の代わりに' quantile'を選択すると、 'quantile(q = .7)'という余分な引数が必要で、foo関数の定義からその状況をどのように扱うべきかわかりません。 –
* argsと** kwargsを使用する –