Создание новой переменной вызывает ошибку pandas / лучший вариант функции против применения против loc

Я хочу создать в панде dataframe, и я попробовал разные варианты. Первые два варианта работают, в то время как третий выдает ошибку "Истинное значение Серии неоднозначно". Я хотел бы понять, что не так с третьим вариантом и в целом, который является лучшей / более эффективной реализацией (учитывая большой объем данных в реальной жизни)

raw_data1 = {'id': [1,2,3,5],
        'age': [0, 5, 10, 2]}
df = pd.DataFrame(raw_data1, columns = ['id','age'])

вариант 1, работает

def set_color(row):
    if row["id"] == 1 and row["age"] ==0:
        return "red"
    elif row["age"] == 10:
        return "blue"
    else:
        return "green"

df = df.assign(color=df.apply(set_color, axis=1))

вариант 2, работает

df["set_color"] = "green"    
df.loc[(df.id == 1) & (df.age == 0), 'set_color'] = 'red'  
df.loc[(df.age == 10), 'set_color'] = 'blue'  

вариант 3, приводящий к ошибке: ValueError: Истинное значение Series является неоднозначным. Используйте a.empty, a.bool(), a.item(), a.any() или a.all().

def set_color (db,x,y,z):

    if db[x]==1 and db[y]==0:
       db[z]="red"
    elif db[y] == 10:
       db[z]="blue"
    else:
       db[z]="green"
set_color(df,'id','age','set_color')

0 ответов

Другие вопросы по тегам