数据帧(TEST1):
cons_flag
Mas
Mas
Wood
Wood
Wood
Mas
Conc
Wood
输出:
cons_flag new_var
Mas MASOM
Mas MASOM
Wood MASOM
Wood MASOM
Wood MASOM
Mas MASOM
Conc MASOM
Wood MASOM
使用代码:
for x in test1['cons_flag']:
if x.find('Mas'):
test1['new_var']="MASOM"
elif x.find('Wood'):
test1['new_var']= "WOODEN"
我的问题是new_var
列值不会按照我的逻辑更新。
答案 0 :(得分:5)
不为此使用for
循环。相反,您可以使用numpy.where
来矢量化您的逻辑。
df['new_flag'] = np.where(df['cons_flag'].str.contains('Mas'), 'MASOM',
np.where(df['cons_flag'].str.contains('Wood'),
'WOODEN', 'No match'))
# cons_flag new_flag
# 0 Mas MASOM
# 1 Mas MASOM
# 2 Wood WOODEN
# 3 Wood WOODEN
# 4 Wood WOODEN
# 5 Mas MASOM
# 6 Conc No match
# 7 Wood WOODEN
您的逻辑将始终失败,因为您正在将矢量化计算与非矢量化条件混合。通过设置test1['new_var'] = 'MASOM'
,您将为整个系列分配一个常量,而不仅仅是一行。