Я пытаюсь изменить столбец, если некоторые строки находятся в другом столбце в той же строке. Я новичок в Пандах.

Мне нужно изменить цену на некоторые апельсины до 200, но не на цену «Red Orange». Я не могу изменить название "фрукты". Это намного более длинная строка, и я просто сократил ее для удобства.

    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 предмета.

Я использовал для цикла один раз, и это изменило весь столбец, чтобы изменить его цену.

-1
comilatribh 30 Май 2019 в 22:06

2 ответа

Лучший ответ
df.loc[((df['fruits'].str.contains('orange')) & (~df['fruits'].str.contains('Red'))),'price'] = 200 

Мы проверяем наличие апельсинов и ~ подтверждаем, что красный цвет отсутствует в строке. Если оба условия выполняются, цена меняется до 200

0
Sid 30 Май 2019 в 20:14

Вы можете использовать регулярные выражения:

import re

df.loc[df['fruits'].str.lower().str.contains(r'(?<!red) orange', regex = True), 'price'] = 200

(?<!red) отрицательный взгляд позади. Так что, если за оранжевым есть красный, это не будет соответствовать. Это также гарантирует его второе слово с обязательным пробелом перед словом оранжевый, так что вам не придется беспокоиться о том, что это цвет, описывающий что-то.

1
Ben Pap 30 Май 2019 в 19:17