numpy.where 与类似运算符

luk*_*e_t 2 python numpy python-2.7 pandas

我想使用np.where,但需要使用通配符来匹配字符串。这是可能的,还是有其他函数最适合在这种情况下使用?

df['PRODUCT'] = np.where(df['TYPE'] == '2b', 'Pencil',
                np.where(df['TYPE'] like 'I5%', 'Ruler', 0))
Run Code Online (Sandbox Code Playgroud)

我尝试使用in运算符,但这不起作用。

df['PRODUCT'] = np.where(df['TYPE'] == '2b', 'Pencil',
                np.where('I5' in df['TYPE'], 'Ruler', 0))
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 7

你需要contains

df['PRODUCT'] = np.where(df['TYPE'] == '2b', 'Pencil',
                np.where(df['TYPE'].str.contains('I5'), 'Ruler', 0))
Run Code Online (Sandbox Code Playgroud)

样本:

df = pd.DataFrame({'TYPE':['2b','2c','I5','I5 a', 'a I5']})
print (df)
   TYPE
0    2b
1    2c
2    I5
3  I5 a
4  a I5

df['PRODUCT'] = np.where(df['TYPE'] == '2b', 'Pencil',
                np.where(df['TYPE'].str.contains('I5'), 'Ruler', 0))

print (df)
   TYPE PRODUCT
0    2b  Pencil
1    2c       0
2    I5   Ruler
3  I5 a   Ruler
4  a I5   Ruler
Run Code Online (Sandbox Code Playgroud)

如果需要仅检查字符串的开头添加^

df['PRODUCT'] = np.where(df['TYPE'] == '2b', 'Pencil',
                np.where(df['TYPE'].str.contains('^I5'), 'Ruler', 0))

print (df)
   TYPE PRODUCT
0    2b  Pencil
1    2c       0
2    I5   Ruler
3  I5 a   Ruler
4  a I5       0
Run Code Online (Sandbox Code Playgroud)