为什么嵌套if / else在Pandas数据帧字符串匹配逻辑中不起作用

时间:2018-03-30 16:07:45

标签: python python-3.x pandas dataframe

数据帧(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列值不会按照我的逻辑更新。

1 个答案:

答案 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',您将为整个系列分配一个常量,而不仅仅是一行。