Python 数据帧中的矢量化标志分配

Python 数据帧中的矢量化标志分配,python,pandas,numpy,vectorization,Python,Pandas,Numpy,Vectorization,我有一个拥有许多代码的数据框。我想将一行中的代码与列表中的代码进行比较。如果该列表中有任何代码,我希望标记该行。我可以使用itertuples方法完成这项工作,如下所示: import pandas as pd import numpy as np df = pd.DataFrame({ 'id' : [1,2,3,4,5], 'cd1' : ['abc1', 'abc2', 'abc3','abc4','abc5'],

我有一个拥有许多代码的数据框。我想将一行中的代码与列表中的代码进行比较。如果该列表中有任何代码,我希望标记该行。我可以使用
itertuples
方法完成这项工作,如下所示:

import pandas as pd
import numpy as np

df = pd.DataFrame({ 'id' : [1,2,3,4,5],
                    'cd1' : ['abc1', 'abc2', 'abc3','abc4','abc5'],
                    'cd2' : ['abc3','abc4','abc5','abc6',''],
                    'cd3' : ['abc10', '', '', '','']})

code_flags = ['abc1','abc6']

# initialize flag column
df['flag'] = 0

# itertuples method

for row in df.itertuples():
    if any(df.iloc[row.Index, 1:4].isin(code_flags)):
       df.at[row.Index, 'flag'] = 1
输出正确地添加了带有适当标志的
标志
列,其中1表示标记的条目

然而,在我的实际用例中,这需要几个小时才能完成。我尝试使用
numpy.where
将此方法矢量化

df['flag'] = 0 # reset
df['flag'] = np.where(any(df.iloc[:,1:4].isin(code_flags)),1,0)
它似乎对所有事物的评价都是一样的。我想我对矢量化如何处理索引感到困惑。我可以删除分号并写入
df.iloc[1:4]
,得到相同的结果


我是否误解了
的where
功能?我的索引是否不正确,是否会导致对所有情况进行
True
评估?有更好的方法吗

使用
np.where
任何
任何(…)


np.where((df.iloc[:,1:4].isin(code_标志)).any(1),1,0)
除了完成任务之外,这更干净。我的真实数据集还有一些额外的问题,因为我的代码标志等价物是一个系列,而不是一个列表。托利斯()修正了这个问题。除非有任何更深入的解释(我显然对熊猫/小熊还是有点陌生),如果你转换它,我会把它作为一个答案,@WenOk让我回答这个问题,以结束这个问题
np.where((df.iloc[:,1:4].isin(code_flags)).any(1),1,0)