如果某些字符串在同一行的另一列中,则我尝试更改一列。我是熊猫新手。
我需要将一些橙子的价格更改为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个商品。
我曾经使用过一次循环,因此更改了整个列以更改其价格。
答案 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