New column based on values in a row

Question:

I would like to create a new column, based on whether a value between 1 and 5 exists in a row.

This is my df:

enter image description here

In case any of the values in a row is between 0 and 5, I would like the new column to return "Yes".
In this case, it’s only the row with 3.0.

I’ve tried something like:

cols=[col for col in df.columns if 'date_' in col]

df['new_col']=df[cols].apply(lambda x: "Yes" if 0<=x[cols]<=5 else "No",axis=0)

but I get this error:

KeyError: "None of [Index(['date_0', 'date_1', 'date_2', 'date_3', 'date_4', 'date_5', 'date_6',n       'date_7', 'date_8', 'date_9', 'date_10', 'date_11', 'date_12',n       'date_13', 'date_14', 'date_15', 'date_16', 'date_17', 'date_18',n       'date_19', 'date_20', 'date_21', 'date_22', 'date_23', 'date_24',n       'date_25', 'date_26', 'date_27', 'date_28', 'date_29', 'date_30',n       'date_31', 'date_32', 'date_33', 'date_34', 'date_35', 'date_36',n       'date_37', 'date_38', 'date_39', 'date_40', 'date_41', 'date_42',n       'date_43', 'date_44', 'date_45', 'date_46', 'date_47', 'date_48',n       'date_49', 'date_50', 'date_51', 'date_52', 'date_53', 'date_54',n       'date_55', 'date_56', 'date_57', 'date_58', 'date_59', 'date_60',n       'date_61', 'date_62', 'date_63', 'date_64', 'date_65', 'date_66',n       'date_67', 'date_68', 'date_69', 'date_70', 'date_71', 'date_72',n       'date_73', 'date_74', 'date_75', 'date_76', 'date_77', 'date_78'],n      dtype='object')] are in the [index]"
Asked By: lala345

||

Answers:

Use DataFrame.filter for date_ columns, compare by DataFrame.le and
DataFrame.ge for between values, chain by & for bitwise AND with DataFrame.any for teste at least one True per row and set Yes/No in numpy.where:

print (df)
   date_1  date_2
0       9      -3
1       3       9
2      -7      -1
3       4       0

df1 = df.filter(like='date_')
df['new_col'] = np.where((df1.ge(0) & df1.le(5)).any(axis=1), "Yes", "No")
print (df)
   date_1  date_2 new_col
0       9      -3      No
1       3       9     Yes
2      -7      -1      No
3       4       0     Yes
Answered By: jezrael
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.