使用IF语句的条件相关-Python

时间:2019-05-31 13:57:59

标签: python pandas numpy if-statement correlation

我正在尝试执行IF语句以评估条件阈值相关性。公式如下:

Threshold Correlation

我尝试执行IF语句,但是它不起作用。我可以用pandas来做到这一点,但这确实是一个糟糕的代码。

p = np.arange(0.1,1,0.1)

r1 = log_r['AEX']; r2 = log_r['MBI10']
np.quantile(r1, p[0])

corrcoef = pd.Series()
if r1<np.quantile(r1,p[0]) & r2<np.quantile(r2,p[0]) & p[0]<0.5:
    corrcoef[0] = np.corrcoef(r1,r2) 

或者,我做了以下事情:

df = pd.DataFrame(pd.concat([log_r['AEX'],log_r['MBI10']],axis=1))
df['p0.1 AEX'] = (df['AEX'] < np.quantile(df['AEX'], p[0]))*df['AEX']    
df['p0.1 MBI10'] = (df['MBI10'] < np.quantile(df['MBI10'], p[0]))*df['MBI10']
np.corrcoef(df['p0.1 AEX'],df['p0.1 MBI10'])

这有效,但是这真的很麻烦,因为我不仅需要p[0],而且需要整个np.arange,AEX和MBI10只是我拥有的2/36对,因此我真的在寻找一种更优雅的解决方案。谢谢!

我正在尝试获取corrcoef第一行中填充的相关系数。尝试执行for循环时出现以下错误:

TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool]

1 个答案:

答案 0 :(得分:1)

按位AND运算符&优先于<(不同于布尔运算符and的绑定比<弱),因此该表达式不会解析了您的预期方式。

r1<np.quantile(r1,p[0]) & r2<np.quantile(r2,p[0]) & p[0]<0.5

等效于

r1 < (np.quantile(r1,p[0]) & r2) < (np.quantile(r2,p[0]) & p[0]) < 0.5

(注意:在Python中,a < b < ca < b and b < c的语法简写,解释了为什么仍将其解释为有效的表达式。)