Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据两个字符串值计算数据帧_Python_Pandas - Fatal编程技术网

Python 根据两个字符串值计算数据帧

Python 根据两个字符串值计算数据帧,python,pandas,Python,Pandas,我有一个数据框架“表”,其中包含一个名为“意见”的列,其中填充了字符串值。我想创建一个名为“cond5”的新列,对于“意见”为“购买”或“中立”的每一行,该列都用TRUE填充 我试过了 table["cond5"]= table.OPINION == "buy" or table.OPINION == "neutral" 这给了我一个错误 table["cond5"]= table.OPINION.all() in ("buy", "neutral") 它对所有行返回FALSE。正如Ed C

我有一个数据框架“表”,其中包含一个名为“意见”的列,其中填充了字符串值。我想创建一个名为“cond5”的新列,对于“意见”为“购买”或“中立”的每一行,该列都用TRUE填充

我试过了

table["cond5"]= table.OPINION == "buy" or table.OPINION == "neutral"
这给了我一个错误

table["cond5"]= table.OPINION.all() in ("buy", "neutral")

它对所有行返回FALSE。

正如Ed Chum指出的,您可以使用:

isin
检查是否完全相等。也许这将是最简单、最易读的


修理

table["cond5"] = table.OPINION == "buy" or table.OPINION == "neutral"
使用

括号是必需的,因为
|
的长度大于
=

x或y
要求
x
y
为布尔值

(table['OPINION'] == "buy") or (table['OPINION'] == "neutral")
从中引发错误

因此,请改用逻辑or运算符
|
,该运算符在序列元素中获取值的


另一种选择是

import numpy as np
table["cond5"] = np.logical_or.reduce([(table['OPINION'] == val) for val in ('buy', 'neutral')])
如果
('buy','neutral')
是一个较长的元组,这可能会很有用


另一个选择是使用熊猫:

str.contains
表['OPINION']中的每个项目执行正则表达式搜索模式
r'buy | neutral'


现在如何决定使用哪一个?下面是一个timeit基准测试,使用:


所以看起来像是
isin
是最快的

另一种方法是
table['OPINION'].isin(['buy','neutral'])
(table['OPINION'] == "buy") or (table['OPINION'] == "neutral")
import numpy as np
table["cond5"] = np.logical_or.reduce([(table['OPINION'] == val) for val in ('buy', 'neutral')])
table["cond5"] = table['OPINION'].str.contains(r'buy|neutral')
In [10]: table = pd.DataFrame({'OPINION':np.random.choice(['buy','neutral','sell',''], size=10**6)})

In [11]: %timeit (table['OPINION'] == "buy") | (table['OPINION'] == "neutral")
10 loops, best of 3: 121 ms per loop

In [12]: %timeit np.logical_or.reduce([(table['OPINION'] == val) for val in ('buy', 'neutral')])
1 loops, best of 3: 204 ms per loop

In [13]: %timeit table['OPINION'].str.contains(r'buy|neutral')
1 loops, best of 3: 474 ms per loop

In [14]: %timeit table['OPINION'].isin(['buy', 'neutral'])
10 loops, best of 3: 40 ms per loop