Заранее спасибо за чтение.Как применить функцию к столбцу в Pandas в зависимости от значения в другом столбце?
У меня есть dataframe:
df = pd.DataFrame({'Words':[{'Sec': ['level']},{'Sec': ['levels']},{'Sec': ['level']},{'Und': ['ba ']},{'Pro': ['conf'],'ProAbb': ['cth']}],'Conflict':[None,None,None,None,'Match Conflict']})
Conflict Words
0 None {u'Sec': [u'level']}
1 None {u'Sec': [u'levels']}
2 None {u'Sec': [u'level']}
3 None {u'Und': [u'ba ']}
4 Match Conflict {u'ProAbb': [u'cth'], u'Pro': [u'conf']}
Я хочу, чтобы применить процедуру, которая для каждого элемента в 'Words'
, проверяет Conflict = 'Match Conflict'
и если да, то применяется некоторую функцию к значению в 'Words'
.
Например, с помощью следующей функции замещающий:
def func(x):
x = x.clear()
return x
Я пишу:
df['Words'] = df[df['Conflict'] == 'Match Conflict']['Words'].apply(lambda x: func(x))
Мой ожидается выход:
Conflict Words
0 None {u'Sec': [u'level']}
1 None {u'Sec': [u'levels']}
2 None {u'Sec': [u'level']}
3 None {u'Und': [u'ba ']}
4 Match Conflict None
Вместо этого я получаю:
Conflict Words
0 None NaN
1 None NaN
2 None NaN
3 None NaN
4 Match Conflict None
Функция применяется только к строке, которая имеет Conflict = 'Match Conflict'
, но за счет других строк (которые все стали None
. Я предположил, что остальные строки останутся нетронутыми; очевидно, это не так.
Можете ли вы объяснить, как я мог бы достичь желаемого результата, не отбрасывая всю информацию в столбце Words
? Я считаю, что ответ может лежать на np.where
, но я не смог выполнить эту работу, это было лучшее, что я мог придумать.
Любая помощь очень ценится. Благодарю.
'пеленгации [«Слова»] = # anything' перезаписывает' words' столбец Так что это ведет себя точно. как вы его просили. –
@PaulH Оцените обратную связь. Я попытался применить то, что мало знал, и это было насколько мне удалось. Я рад за вашу помощь и помощь Psidom. – Chuck