数据帧逻辑-Python

数据帧逻辑-Python,python,pandas,numpy,logic,Python,Pandas,Numpy,Logic,为了好玩,我试图对交易逻辑进行回溯测试,但我似乎理解如何利用numpy做出决策。例如,我想根据数据是在上下两行的下方还是上方来设置df['position']=1或-1。如果数据=上一行。一旦数据>=上一行,我想设置位置=-1并保持在-1,然后重复 import pandas as pd import numpy as np import matplotlib.pyplot as plt data = np.random.standard_normal((5, 100)).flatten()

为了好玩,我试图对交易逻辑进行回溯测试,但我似乎理解如何利用numpy做出决策。例如,我想根据数据是在上下两行的下方还是上方来设置df['position']=1或-1。如果数据=上一行。一旦数据>=上一行,我想设置位置=-1并保持在-1,然后重复

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = np.random.standard_normal((5, 100)).flatten()
data = data.cumsum()

df = pd.DataFrame({'Data': data})
df['std'] = df['Data'].rolling(50).std()
df['SMA'] = df['Data'].rolling(50).mean()
df['upper'] = df['SMA'] + (2 * df['std'])
df['lower'] = df['SMA'] - (2 * df['std'])

df[['Data', 'SMA', 'upper', 'lower']].plot(figsize=(10, 6))

df['position'] = 0
plt.show()

在这里,我试图做到这一点,但失败了,因为我不知道如何正确地做到这一点

df['islower'] = np.where(df['Data'] < df['lower'], 1, 0)
df['isupper'] = np.where(df['Data'] > df['upper'], 1, 0)
df['position'] = np.where(df['isupper']==1, -1, 0) | np.where(df['islower']==1, 1, 0)
df['islower']=np.where(df['Data']df['upper'],1,0)
df['position']=np.where(df['isupper']==1,-1,0)| np.where(df['islower']==1,1,0)

我想你要做的是:

df['islower'] = df['islower'].where(df['Data'] < df['lower'], 1, 0)    
df['isupper'] = df['isupper'].where(df['Data'] < df['upper'], 1, 0)    
df['islower']=df['islower']。其中(df['Data']
你失败是什么意思?你犯了什么错误?或者你想显示你得到的数据吗?如果df['data']df['upper'],如何设置df['position']=1。我可以在没有熊猫的情况下使用状态逻辑来实现这一点,但目标是使用数据帧来实现这一点。下面的答案不是你想要的吗?如果没有,我建议您显示希望获得的输出与实际获得的输出。顺便说一句,请注意
numpy
pandas
都有
where
功能。我想你要找的是
pandas
Yes中的那一个,这显示了如何正确地判断数据是在线下还是在线上,但是如果我们触底/顶线,如何设置位置=1或-1?是,这显示了如何正确地判断数据是否在行的下方或上方,但是如果我们触及底行/顶行,我如何设置position=1或-1?这不是您正在寻找的吗?我想知道如何设置df['position']=np。其中(df['isupper']==1,-1,0)| np。其中(df['islower'==1,1,0)如果您使用df['islower'==1,1,0)我使用的代码不正确[['position'].绘图(figsize=(10,6))并查看结果你是说如何设置OR条件?我想,我不确定当查看df['islower']和df['isupper']时,这是设置position=1还是-1的最佳方法