Преобразование назначения условных рядов в пользовательскую функцию - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь ввести новый столбец в мою серию данных.

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

Однако, когда я использую функцию def плюс цикл for, я всегда получаю KeyError: 0. Я хочу сравнить число в статистике с 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

1 Ответ

0 голосов
/ 11 октября 2018

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

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

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

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

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

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

df['Comparison'] = df['Stats'].apply(compare, 1)
...