martin
martin

Reputation: 1185

Best way to replace value in pandas df based on list

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

Answers (3)

ansev
ansev

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

jezrael
jezrael

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

BENY
BENY

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

Related Questions