Функция ApplyMap для нескольких столбцов pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть этот фрейм данных

 dd = pd.DataFrame({'a':[1,5,3],'b':[3,2,3],'c':[2,4,5]})

   a  b  c
0  1  3  2
1  5  2  4
2  3  3  5
  

Я просто хочу заменить номера столбцов a и b, которые меньше, чем номера столбцов c. Я хочу выполнить эту операцию по строке

Я сделал это

 dd.applymap(lambda x: 0 if x < x['c'] else x )
  

Я получаю сообщение об ошибке

 TypeError: 'int' object is not subscriptable
  

Я понял, что x — это целое число, но как получить значение столбца c для этой строки

Я хочу, чтобы этот вывод

    a  b  c
0  0  3  2
1  5  0  4
2  0  0  5
  

Ответ №1:

Использовать DataFrame.mask с DataFrame.lt :

 df = dd.mask(dd.lt(dd['c'], axis=0), 0)
print (df)
   a  b  c
0  0  3  2
1  5  0  4
2  0  0  5
  

Или вы можете установить значения, сравнив трансляцию по столбцам c :

 dd[dd < dd['c'].to_numpy()[:, None]] = 0
print (dd)
   a  b  c
0  0  3  2
1  5  0  4
2  0  0  5