2015-11-16 2 views
1

У меня есть MWE который выглядит следующим образом:Панды набор значений строк на dataframe подмножества

import pandas as pd 
test = pd.DataFrame({'A':['a','b'], 'B':['c','d']}) 

Я хочу, чтобы заменить значения в столбце B со строкой, если соответствующие значения в столбце A равны ' а». Я попробовал несколько вещей:

In [27]: test[test['A']=='a']['B'] = 'REPLACEMENT' 

In [28]: test 
Out[28]: 
    A B 
0 a c 
1 b d 

и:

In [30]: test.ix[test['A']=='a','B'].values.fill('REPLACEMENT') 

In [31]: test 
Out[31]: 
    A B 
0 a c 
1 b d 

Ни один из них не похоже на работу. Как это можно достичь?

+1

Вы должны получить сообщение об ошибке после того, как команда [27] сообщит вам, что вы делаете неправильно, и указав на решение. Какую версию панд вы используете? – DSM

+0

Я, возможно, ошибочно пропустил это - я просто показывал свою логику. Я использую 16.2. – BML91

+0

Сообщение об ошибке описывало проблему, рекомендовало решение и дало URL-адрес для продолжительного обсуждения, которое объясняет, что происходит с решением, и почему назначение с использованием цепочки индексирования не работает. Это стоит прочитать. – DSM

ответ

1
In [64]: 
test.B.loc[test.A == 'a'] = 'Replacement' 
test 
Out[64]: 
    A B 
0 a Replacement 
1 b d 
+0

Это работает, но я получаю предупреждение: 'SettingWithCopyWarning: Значение, которое нужно установить на копии фрагмента из DataFrame', вызывает ли это беспокойство? – BML91

+0

ok не проблема, попробуйте использовать 'test.B.loc [test.A == 'a'] = 'Замена'' вместо –