Reputation: 1185
I have a DF:
NAME V ID
name1 0 424
name2 0 123
name3 1 241
And list:
list1 = ['name1', 'name4']
How can I in best way replace V in df to 1 if name is in list. Example output:
NAME V ID
name1 1 424
name2 0 123
name3 1 241
I tried to do it in for loop but it's not optimal way for df with 60k+ records, so I tried find another options, and I found something like this:
df.NAME[[x for x in range(len(df)) if x in list1]] = 1
But I don't think is the best way because it still for loop.
Upvotes: 2
Views: 98
Reputation: 30920
Use Series.mask
:
my_list=['name1', 'name4']
df['V']=df['V'].mask(df['NAME'].isin(my_list),1)
print(df)
NAME V ID
0 name1 1 424
1 name2 0 123
2 name3 1 241
Upvotes: 1
Reputation: 862771
First change variable name list
to L
because builtins and then replace by numpy.where
with Series.isin
for check membership:
L = ['name1', 'name4']
df['V'] = np.where(df.NAME.isin(L), 1, df.NAME)
Upvotes: 3
Reputation: 323306
I will use , BTW do not name your list
as 'list'
df.loc[df.NAME.isin(['name1', 'name4']),'V']=1
df
NAME V ID
0 name1 1 424
1 name2 0 123
2 name3 1 241
Upvotes: 6