Как написать lambda функцию с условием которая проходит по строкам всего датафрейма?
Например есть простенький датафрейм:
df = pd.DataFrame([[1,'Apple', True],[2,'Apple', False],[3,'Orange', False],[4,'Orange', True]],
columns=['count','fruit','fresh'])
Мне нужно написать lambda функцию с условием описанным ниже и применить ее к датафрейму, чтобы получить новый столбец через apply:
lambda x: 1 if 2<=x.count<=3 and x.fruit=='Apple' or x.fresh==True else 0
df['new_col'] = df.apply(lambda...
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
Ну вам, вероятно, просто нужно указать axis. Только определитесь с приоритетом условий OR и AND:
df['new_col'] = df.apply(lambda x: 1 if (2<=x["count"]<=3)&
(x["fruit"]=="Apple")|
(x["fresh"]==True) else 0, axis=1)
df:
count fruit fresh new_col
0 1 Apple True 1
1 2 Apple False 1
2 3 Orange False 0
3 4 Orange True 1
Автор решения: SergFSM
→ Ссылка
при желании тут можно обойтись без лямбды:
df['new_col'] = ((df['count'].isin([2,3]))&(df['fruit']=='Apple')|df['fresh'])*1
print(df)
'''
count fruit fresh new_col
0 1 Apple True 1
1 2 Apple False 1
2 3 Orange False 0
3 4 Orange True 1