如果value包含字符串,则设置另一个列值

时间:2015-06-04 14:30:30

标签: python regex parsing pandas

我在Pandas中有一个数据框,其中有一个名为“Campaign”的列,其值如下:

“UK-Sample-Car Rental-Car-Broad-MatchPost”

我需要能够确定该字符串包含“Car Rental”字样,并将另一个Product列设置为“CAR”。连字符并不总是将单词Car分开,因此以这种方式找到字符串是不可能的。

如何在Pandas / Python中实现这一目标?

1 个答案:

答案 0 :(得分:4)

pandas作为一些可以使用的甜字符串函数

例如,像这样:

df['vehicle'] = df.Campaign.str.extract('(Car).Rental').str.upper()

这会将列车辆设置为extract function赋予的正则表达式括号内的内容。

此外str.upper使其成为大写

额外奖金:

如果你想为车辆分配一些不在原始字符串中的东西,你需要再采取一些步骤,但我们仍然使用字符串函数这次str.contains

is_motorcycle = df.Campaign.str.contains('Motorcycle')
df['vehicle'] = pd.Series(["MC"] * len(df)) * is_motorcycle

这里的第二行创建了一系列" MC"字符串,然后将它屏蔽在我们发现的摩托车条目上。

如果你想组合多个,我建议你使用map函数:

vehicle_list = df.Campaign.str.extract('(Car).Rental|(Motorcycle)|(Hotel)|(.*)')
vehicle = vehicle_list.apply(lambda x: x[x.last_valid_index()], axis=1)
df['vehicle'] = vehicle.map({'Car':'Car campaign', 'Hotel':'Hotel campaign'})

首先将数据提取到每行的选项列表中。案件由|分开最后一个只是下面Series.apply function所需的全部内容。 Series.map function非常简单,如果捕获的数据是“汽车”,我们会设置“汽车广告系列”和“' Hotel'我们设置了酒店活动'等