对于循环,如果对于多个条件,则在熊猫的同一行中更改另一列

时间:2019-05-30 19:06:28

标签: python pandas

如果某些字符串在同一行的另一列中,则我尝试更改一列。我是熊猫新手。

我需要将一些橙子的价格更改为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个商品。

我曾经使用过一次循环,因此更改了整个列以更改其价格。

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

import re

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

(?<!red)是负面的看法。因此,如果橙色后面是红色,它将不匹配。它还可以确保第二个单词带有橙色之前的必填空格,因此您不必担心它是描述事物的颜色。

答案 1 :(得分:0)

df.loc[((df['fruits'].str.contains('orange')) & (~df['fruits'].str.contains('Red'))),'price'] = 200 

我们检查橙色和~,以确认字符串中不存在红色。如果两个条件都成立,则价格更改为200