Как вызвать пользовательскую функцию в Pandas

#pandas

#pandas

Вопрос:

Я определил пользовательскую функцию для исправления выбросов одного из моих столбцов DF. Функция работает должным образом, но я не понимаю, как вызвать эту функцию в DF. Не могли бы вы помочь мне в решении этой проблемы?

Ниже приведена моя пользовательская функция:

 def corr_sft_outlier(in_bhk, in_sft):
    bhk_band = np.quantile(outlierdf2[outlierdf2.bhk_size==in_bhk]['avg_sft'], (.20,.90))
    lower_band = round(bhk_band[0])
    upper_band = round(bhk_band[1])
    if (in_sft>=lower_band)amp;(in_sft<=upper_band):
        return in_sft
    elif (in_sft<lower_band):
        return lower_band
    elif (in_sft>upper_band):
        return upper_band
    else:
        return None
  

И я вызываю эту функцию следующими способами, но оба они не работают.

  1. outlierdf 2[[‘bhk_size’,’avg_sft’]].apply(corr_sft_outlier)
  2. outlierdf 2.apply(corr_sft_outlier(outlierdf 2[‘bhk_size’],outlierdf 2[‘avg_sft’]))

Комментарии:

1. Где вы хотите сохранить значение, возвращаемое функцией?

2. У меня есть один столбец, созданный в том же DF outlierdf2[‘adj_avg_sft’]

Ответ №1:

Вот и все:

 outlierdf2['adj_avg_sft'] = df.apply(lambda x: corr_sft_outlier(x['bhk_size'],x['avg_sft']), axis=1)
  

Комментарии:

1. У меня есть следующий вопрос для ответа выше. Я определил еще одну функцию, которая принимает только один параметр, в таком случае я могу вызвать функцию без передачи аргумента, например, «df1.total_sqft.apply(convert_sqft_to_num)». Теперь, почему моя другая функция outlierdf 2[[‘bhk_size’,’avg_sft’]].apply(corr_sft_outlier) не работает, однако я выбрал 2 столбца, которые необходимы для передачи функции? Не могли бы вы, пожалуйста, объяснить это?

2. Можете ли вы опубликовать полный код? может быть, в другом вопросе?

3. Извините за задержку в моем ответе, догнал работу. Опубликую код сегодня.

4. Я опубликовал вопрос как «Вызов пользовательской функции в Pandas»