Преобразование назначения условных рядов в пользовательскую функцию

1

Я пытаюсь ввести новую колонку в свои ряды данных.

Я знаю, как использовать np.where(), чтобы сделать эту работу или просто цикл for, но вы хотите попробовать функцию def плюс цикл for.

Однако, когда я использую функцию def плюс цикл for, я всегда заканчивал работу с KeyError: 0. Я хочу сравнить число в Stats с 1, если оно больше 1, мой новый столбец будет иметь значение True и он меньше 1, значение будет False.

Вот мой код:

def compare(a,b):
    if a > b:
        return True
    else:
        return False 


df.Comparison = {}  

for i in range (len(df)):  
    df.Comparison[i].apply(compare, (df.Stats[i],1))
df
  • 2
    привет, отступ кажется очень сломанным Вы можете это исправить, пожалуйста? (Я исправил форматирование, чтобы оно выглядело как код) И что такое df ? dataframe? это не минимальный воспроизводимый пример
Теги:
python-3.x
for-loop
function

1 ответ

1

Кажется, вы уже знаете, как использовать np.where:

df['Comparison'] = np.where(df['Stats'] > 1, True, False)

Но np.where избыточен, так как вы можете напрямую назначить логическую np.where:

df['Comparison'] = df['Stats'] > 1

Если вы хотите использовать pd.Series.apply с пользовательской функцией, обратите внимание, что цикл "скрыт" в методе Pandas. Поэтому вам не нужно писать цикл for самостоятельно.

def compare(val, k):
    return val > k

df['Comparison'] = df['Stats'].apply(compare, 1)
  • 0
    Большое спасибо. Я попробовал это с np.where раньше и работал. Но понял, что меня попросили использовать def & apply для этого. Я сделаю ссылку на ваше предложение и попробую.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню