Как задать параметры дочерней функции внутри главной функции?
У меня есть функция:
def filter_size(row, limit=20):
if (row['y']==1) & (row['s']>limit) & (row['step_vol']>limit):
val = 1
else:
val = 0
return val
Как видите, в этой функции есть 2 параметра: row, limit
Функцию filter_size, я использую внутри другой функции:
def get_target_size(data, predict_step = 5, trades = 5):
"""
data - dataset for preprocessing
predict_step - the number of trades in the future where we want to predict the movement
trades - the number of trades in the past we use for prediction
return: X, y - attributes and target for models
"""
data['step'] = data['p'].shift(predict_step)
data['step_vol'] = data['s'].shift(predict_step)
data['step-1'] = data['p'].shift(predict_step+1)
for i in range(1, trades+1):
data[i] = data['step-1'].pct_change(i)
data.dropna(inplace = True)
data['y'] = data['p'] - data['step']
data['y'] = data['y'].apply(lambda s: 1 if s > 0 else 0)
data['y'] = data.apply(filter_size, axis=1)
y = data['y']
y = y[:-trades]
X = data.drop(['p', 'step', 'step-1', 'y', 'step_vol'], axis=1)
X = X[:-trades]
print('Classes distribution:')
print(data['y'].value_counts())
print('X shape: {}'.format(X.shape))
print('y shape: {}'.format(y.shape))
return X, y
Как я могу изменять параметры первой функции filter_size (скажем, я хочу задать limit=50) при вызове второй функции get_target_size?
Сейчас мне приходтся каждый раз корректировать функцию filter_size, когда я хочу изменить limit, что не очень удобно
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
def get_target_size(data, predict_step=5, trades=5, limit=50):
...
data['y'] = data.apply(filter_size, limit=limit, axis=1)
...