Для цикла и если для нескольких условий и измените другой столбец в той же строке в пандах

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

Мне нужно изменить цену на некоторые апельсины до 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 один раз, и это изменило весь столбец, чтобы изменить его цену.

Это сложно, потому что оранжевый — это фрукт и цвет. Также не каждый фрукт описывается цветом, как в случае с манго.

iamchoosinganame 30.05.2019 21:14

Да, вот почему я хотел бы знать, как настроить несколько условий в Pandas... Так отличается от обычного python

comilatribh 30.05.2019 21:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
37
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Спасибо! Это было именно то, что я искал

comilatribh 17.06.2019 21:56

Другие вопросы по теме