2017-02-22 6 views
2

У меня есть пример Dataframe ДФ:Изменение значения столбца при условии

Col1  Col2 
    a  "some string AXA some string " 
    b  "some string2" 

Я хотел бы: если df.Col2 содержит «AXA», а затем измените значение на 1, если нет, то изменить его 0. Так я получаю:

Col1  Col2 
    a   1 
    b   0 

Я пытался что-то подобное,

if "AXA" in df['Col2']: 
    df['Col2'] = 1 

или я f Я могу сделать что-то вроде

df.loc[df['Col2'] contains "AXA"] = 1 

Благодарим за помощь!

+0

Я вижу, вы удаляете вопрос 15 минут назад. Вы находите какое-то решение? – jezrael

+0

Да, я нашел ошибку в своем коде :) – datascana

+0

ОК, так что удачи! – jezrael

ответ

3

Вы можете использовать str.contains для boolean mask, а затем бросил в int:

print (df.Col2.str.contains('AXA')) 
0  True 
1 False 
Name: Col2, dtype: bool 


df['Col2'] = df.Col2.str.contains('AXA').astype(int) 
print (df) 
    Col1 Col2 
0 a  1 
1 b  0 

EDIT: Если нужно создать выход на 2 условиях, быстрый является использование двойной numpy.where:

print (df) 
    Col1       Col2 
0 a some string AXA some string 
1 a some string AXE some string 
2 b     some string2 

df['Col2'] = np.where(df.Col2.str.contains('AXA'), 1, 
      np.where(df.Col2.str.contains('AXE'), 2, 0)) 
print (df) 
    Col1 Col2 
0 a  1 
1 a  2 
2 b  0 
+0

Это сработало! В качестве плюса, если я хочу иметь: AXA = 1, AX = 2, other = 0, я могу использовать тот же метод? – datascana

+0

Пожалуйста, проверьте отредактированный ответ. – jezrael

+0

Он работал как шарм, ожидая кулдауна, чтобы одобрить ваш ответ – datascana

Смежные вопросы