首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查一个系列的符号是否符合给定的符号串?

如何检查一个系列的符号是否符合给定的符号串?
EN

Stack Overflow用户
提问于 2014-10-11 07:22:35
回答 3查看 1.4K关注 0票数 1

例如,我有一个系列如下,

代码语言:javascript
复制
ts = pd.Series([-1,-2.4,5,6,7, -4, -8])

我想知道是否有节奏式的方法来检查ts的标志,例如,

代码语言:javascript
复制
sign = '++++---' # returns False

代码语言:javascript
复制
sign = '--+++--' # returns True
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-11 10:24:24

这个解决方案需要一些numpy函数,但是由于您在数据系列中使用熊猫,这对您来说可能不是一个问题。

代码语言:javascript
复制
import pandas as pd
import numpy as np

values = pd.Series([-1, -2.4, 5, 6, 7, -4, -8, 0])
sign_str = "--+++--0"

sign_map = {
    "+" : 1,
    "0" : 0,
    "-" : -1
}

expected_signs = list(map(sign_map.get, sign_str))
observed_signs = np.sign(values)
np.all(expected_signs == observed_signs)
票数 1
EN

Stack Overflow用户

发布于 2014-10-11 10:16:30

要检查Series的元素是否为正数,可以创建一个布尔序列,如下所示:

代码语言:javascript
复制
>>> ts >= 0
0    False
1    False
2     True
3     True
4     True
5    False
6    False
dtype: bool

(我假设0是正面的,但如果您选择其他方法,则可以采用这种技术。)

要将sign转换成类似的布尔序列,您需要将字符串“+”和“-”字符串解释为布尔值。例如:

代码语言:javascript
复制
>>> sign = '++++---'
>>> pd.Series(list(sign)).replace({'-': 0, '+': 1}).astype(bool)
0     True
1     True
2     True
3     True
4    False
5    False
6    False
dtype: bool

现在您可以比较这两个系列并使用all。一句话,整件事看上去是这样的:

代码语言:javascript
复制
>>> all((ts >= 0) == pd.Series(list('++++---')).replace({'-': 0, '+': 1}).astype(bool))
False

>>> all((ts >= 0) == pd.Series(list('--+++--')).replace({'-': 0, '+': 1}).astype(bool))
True
票数 1
EN

Stack Overflow用户

发布于 2014-10-11 15:25:51

以下是另一种不需要任何字符串替换操作的方法:

代码语言:javascript
复制
import numpy as np
import pandas as pd

ts = pd.Series([-2, -4, -6, 5, 7, 9])
expected_signs = '---+++'

target_signs = np.array(list(expected_signs)) == '+'
actual_signs = ts.values > 0
match = np.all(target_signs == actual_signs)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26312174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档