Я пытаюсь изменить столбец, если некоторые строки находятся в другом столбце в той же строке. Я новичок в пандах.
Мне нужно изменить цену на некоторые апельсины до 200, но не на цену «Красного апельсина». Я не могу изменить название "фруктов". Это гораздо более длинная строка, и я сделал ее короче для удобства.
fruits price
Green apple from us 10
Orange Apple from US 11
Mango from Canada 15
Blue Orange from Mexico 16
Red Orange from Costa 15
Pink Orange from Brazil 19
Yellow Pear from Guatemala 32
Black Melon from Guatemala 4
Purple orange from Honduras 5
чтобы конечный результат был
fruits price
Green apple from us 10
Orange Apple from US 11
Mango from Canada 15
Blue Orange from Mexico 200
Red Orange from Costa 15
Pink Orange from Brazil 200
Yellow Pear from Guatemala 32
Black Melon from Guatemala 4
Purple orange from Honduras 5
Я старался
df.loc[df['fruits'].str.lower().str.contains('orange'), 'price'] = 200
Но это дает всего 4 предмета, чтобы изменить его цену, а не только 2 предмета.
Я использовал цикл for один раз, и это изменило весь столбец, чтобы изменить его цену.
Да, вот почему я хотел бы знать, как настроить несколько условий в Pandas... Так отличается от обычного python
Вы можете использовать регулярное выражение:
import re
df.loc[df['fruits'].str.lower().str.contains(r'(?<!red) orange', regex = True), 'price'] = 200
(?<!red)
— это негативный взгляд сзади. Поэтому, если за оранжевым находится красный, он не будет соответствовать ему. Это также гарантирует, что это второе слово с обязательным пробелом перед словом оранжевый, поэтому вам не придется беспокоиться о том, что это цвет, описывающий что-то.
df.loc[((df['fruits'].str.contains('orange')) & (~df['fruits'].str.contains('Red'))),'price'] = 200
Мы проверяем наличие апельсинов и ~
, чтобы подтвердить, что красного цвета в строке нет. Если оба условия выполняются, цена меняется на 200
Спасибо! Это было именно то, что я искал
Это сложно, потому что оранжевый — это фрукт и цвет. Также не каждый фрукт описывается цветом, как в случае с манго.