#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