我有一个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
但是我不认为这是最好的方法,因为它仍然是循环的。
答案 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