如何在python中应用基于字符串中子字符串的条件函数



我正试图将一列附加到数据帧中,其值取决于字符串是否包含特定的子字符串。我会在这里解释。我在python上工作。

我有以下字符串(或者更具体地说,一个包含字符串的对象(:

color = "tigerbluetree"

然后我有以下数据帧:

Day     Money
-----------------------
0     Day 1         3
1     Day 2         3
2     Day 3         5
3     Day 4         3 
4     Day 5         2
5     Day 6         0
6     Day 7         0
7     Day 8         6 
...

现在,我想创建一个名为Value的新列。我希望CCD_ 2中的值是字符串CCD_;蓝色";。如果它确实包含子串"0";蓝色";,在这种情况下,我想把Money列中的所有值都改为0。如果它不包含子串"0";蓝色";,那么我想让Money列中的所有值保持原样。因此,我想根据上述信息生成以下数据帧:

Day     Money
-----------------------
0     Day 1         0
1     Day 2         0
2     Day 3         0
3     Day 4         0 
4     Day 5         0
5     Day 6         0
6     Day 7         0
7     Day 8         0 
...

我已经尝试了以下代码:

df['Money'] = np.where(color.contains("blue"), 0, df['Money'])

我收到以下错误消息:

AttributeError: 'str' object has no attribute 'contains'

如何解决这个问题?我不知道为什么str.contains()在这里不起作用,因为我正在处理一个字符串。

您可以使用普通条件赋值而不是np.where,因为您不是在实际数据帧上进行比较,而是在单独的字符串上进行比较:

>>> color = "tigerbluetree"
>>> df['value'] = 0 if 'blue' in color else df['Money']
>>> df
Day   Money value
0   Day 1   3   0
1   Day 2   3   0
2   Day 3   5   0
3   Day 4   3   0
4   Day 5   2   0
5   Day 6   0   0
6   Day 7   0   0
7   Day 8   6   0

同样在这个问题中,您提到要创建一个名为value的新列,但您正试图覆盖列Money

字符串只有__contains__属性,或者更多时候我们都使用in方法。

因此使用in

df['Money'] = np.where("blue" in color, 0, df['Money'])

那么df看起来像:

Day  Money            
0    Day 1      0
1    Day 2      0
2    Day 3      0
3    Day 4      0
4    Day 5      0
5    Day 6      0
6    Day 7      0
7    Day 8      0

最新更新