Создание новой переменной вызывает ошибку 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')