Python 根据两个字符串值计算数据帧
我有一个数据框架“表”,其中包含一个名为“意见”的列,其中填充了字符串值。我想创建一个名为“cond5”的新列,对于“意见”为“购买”或“中立”的每一行,该列都用TRUE填充 我试过了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
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