例如,我有一个系列如下,
ts = pd.Series([-1,-2.4,5,6,7, -4, -8])我想知道是否有节奏式的方法来检查ts的标志,例如,
sign = '++++---' # returns False而
sign = '--+++--' # returns True发布于 2014-10-11 10:24:24
这个解决方案需要一些numpy函数,但是由于您在数据系列中使用熊猫,这对您来说可能不是一个问题。
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)发布于 2014-10-11 10:16:30
要检查Series的元素是否为正数,可以创建一个布尔序列,如下所示:
>>> ts >= 0
0 False
1 False
2 True
3 True
4 True
5 False
6 False
dtype: bool(我假设0是正面的,但如果您选择其他方法,则可以采用这种技术。)
要将sign转换成类似的布尔序列,您需要将字符串“+”和“-”字符串解释为布尔值。例如:
>>> 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。一句话,整件事看上去是这样的:
>>> all((ts >= 0) == pd.Series(list('++++---')).replace({'-': 0, '+': 1}).astype(bool))
False
>>> all((ts >= 0) == pd.Series(list('--+++--')).replace({'-': 0, '+': 1}).astype(bool))
True发布于 2014-10-11 15:25:51
以下是另一种不需要任何字符串替换操作的方法:
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)https://stackoverflow.com/questions/26312174
复制相似问题