IIUC,
apply
допускает дополнительные параметры.Вам нужно передать его как keyword
или позиционные агрументы, используя args
с кортежем.То, как вы используете переданные параметры, зависит от вашего воображения.То есть это зависит от того, как вы пишете, вы применяете func
, чтобы использовать их для получения желаемого результата.
Давайте возьмем ваши примерные данные.Я изменил ваш func_apply
следующим образом, чтобы последовательно обрабатывать каждую группу, используя дополнительные params
и объединить их в окончательный результат:
def func_apply(df,params=[1]):
d = [pd.Series(np.random.random(3), name=str(par),index=['x', 'y', 'z']) for par in params]
return pd.DataFrame(d)
Теперь вызовите apply func_apply
и передайте [1, 2, 10]
к нему (я использую keyword
для передачи params
):
df.groupby('col').apply(func_apply, params=[1, 2, 10])
Out[1102]:
x y z
col
A 1 0.074357 0.850912 0.652096
2 0.307986 0.267658 0.558153
10 0.351000 0.743816 0.192400
B 1 0.179359 0.411784 0.535644
2 0.905294 0.696661 0.794458
10 0.635706 0.742784 0.963603
C 1 0.020375 0.693070 0.225971
2 0.448988 0.288206 0.715875
10 0.980669 0.474264 0.036715
Не передавая params
, применить возвращается к значению по умолчанию:
df.groupby('col').apply(func_apply)
Out[1103]:
x y z
col
A 1 0.499484 0.175008 0.331594
B 1 0.052399 0.965129 0.649668
C 1 0.053869 0.297008 0.793262