熊猫DataFrame逻辑 - 蟒蛇
问题描述:
试图回溯测试交易逻辑的乐趣,但我似乎理解如何利用numpy做出决定。例如,我想根据数据是低于还是高于上下行来设置df ['position'] = 1或-1。如果数据< =下行我想设置位置= 1,并保持它在1,直到数据它是> =上线。一旦数据> =上线我想设置位置= -1并保持在-1然后重复。熊猫DataFrame逻辑 - 蟒蛇
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'] = df['islower'].where(df['Data'] < df['lower'], 1, 0)
df['isupper'] = df['isupper'].where(df['Data'] < df['upper'], 1, 0)
你什么意思,你失败了呢?你得到的错误是什么?或者你想显示出来的数据? – splinter
如果df ['Data']我不知道如何设置df ['position'] = 1 DF [ '上']。我可以用没有熊猫的状态逻辑来做到这一点,但目标是用数据框做到这一点。 –
BillyRay
不是你要找的东西的答案吗?如果没有,我建议你展示你想得到的输出与你实际得到的输出 – splinter