根据清单替换熊猫df中值的最佳方法

时间:2019-12-16 13:22:55

标签: python pandas

我有一个DF:

NAME  V ID
name1 0 424
name2 0 123
name3 1 241

并列出:

list1 = ['name1', 'name4']

如果名称在列表中,如何最好地将df中的V替换为1。 输出示例:

NAME  V ID
name1 1 424
name2 0 123
name3 1 241

我尝试在for循环中执行此操作,但这不是具有60k +记录的df的最佳方法,因此我尝试查找其他选项,并且发现了类似以下内容:

df.NAME[[x for x in range(len(df)) if x in list1]] = 1

但是我不认为这是最好的方法,因为它仍然是循环的。

3 个答案:

答案 0 :(得分:5)

我将使用,顺便说一句,不要将您的list命名为'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

答案 1 :(得分:3)

首先将变量名称list更改为L,因为内建,然后用numpy.where替换为Series.isin以获得支票成员资格:

L = ['name1', 'name4']

df['V'] = np.where(df.NAME.isin(L), 1, df.NAME)

答案 2 :(得分:1)

使用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