Использование строковой функции arg для обозначения новой функции в pandas DF - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь написать функцию python, которая позволит мне добавлять функции в pandas df для машинного обучения.Я думаю, что я неправильно понимаю, как можно использовать строки в функциях Python.

Функция просматривает строку из df, проверяет, будет ли идентификатор строки как много месяцев в будущем (количество строк ниже) имеет такой же идентификатор.Если это так, то добавляется значение функции «начало» будущей строки в столбец новой функции, иначе «конец» начальной строки.Это настраиваемая функция смены.

Как только я добавлю эту функцию, я бы хотел добавить еще один столбец с 1 или 0 как новую функцию к df с меткой столбца approriate.Это будет помечено что-то вроде 'feat_so_many_months_in_future_is_higher_or_lower'.

Проблема в том, что я не могу даже добраться до второго двоичного файла вокруг пороговой части.У меня проблема с добавлением первой новой функции с соответствующим именем.

def binary_up_down(name_of_new_feature, months_in_future, percent_threshold):
    name_of_new_feature = [] 
    for i in range(0, df.shape[0], 1): 
        try:
            if df['identifier'][i]==df['identifier'][i + months_in_future]:
                name_of_new_feature.append(df['start'][i + months_in_future])
            else:
                name_of_new_feature.append(df['end'][i])
        except KeyError:
                name_of_new_feature.append(df['end'][i])

    df[str(name_of_new_feature)]=name_of_new_feature

    ### Add test to check if shifted value is above or below threshold and name new feature  
        appropriately ###

    return df

Моя мысль состоит в том, чтобы вызвать функцию следующим образом:

binary_up_down('feat_value_in_1m', 1, 5)
#Then
binary_up_down('feat_value_in_3m', 3, 5) # and on an on...

Когда я запускаю код, эта строка кажется проблемой:

df[str(name_of_new_feature)] = name_of_new_feature

... потому что он добавляет все новые значения столбцов объектов в качестве имени столбца!

Любые указатели очень ценятся!

1 Ответ

1 голос
/ 23 сентября 2019

Вы заменяете name_of_new_feature списком в первой строке вашей функции.Я бы порекомендовал переименовать его в что-то вроде value_of_new_feature

def binary_up_down(name_of_new_feature, months_in_future, percent_threshold):
    value_of_new_feature = [] 
    for i in range(0, df.shape[0], 1): 
        try:
            if df['identifier'][i]==df['identifier'][i + months_in_future]:
                value_of_new_feature .append(df['start'][i + months_in_future])
            else:
                value_of_new_feature .append(df['end'][i])
        except KeyError:
                value_of_new_feature .append(df['end'][i])

    df[name_of_new_feature]=value_of_new_feature 

    ### Add test to check if shifted value is above or below threshold and name new feature  
        appropriately ###

    return df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...