Как написать 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
→ Ссылка