如何获得在熊猫中有一定限制的正确行数据?

时间:2019-07-04 03:39:16

标签: pandas

我想根据特定条件提取正确的行。

数据帧包含带有条目信号的列条目。 仅在市场上没有订单时有效的输入。因此,在两个连续信号中只有第一个信号有效 有效的出口是进入后5小节。

这是我的代码和数据框

import pandas as pd

df = pd.DataFrame({'entry':[0,1,0,1,0,0,0,1,0,0,0,0,0,0]})
df['exit'] = df['entry'].shift(5)

df['state'] = np.select([df['entry'] == 1, df['exit'] == 1], [1, 0], default=np.nan)
df['state'].ffill(inplace=True)
df['state'].fillna(value=0, inplace=True)
df['change'] = df['state'].diff()
print(df)


entrysig = df[df['change'].eq(1)]
exitsig = df[df['change'].eq(-1)]

tradelist = pd.DataFrame({'entry': entrysig.index, 'exit': exitsig.index})

tradelist['wantedexit'] = [6, 12]

print(tradelist)

输出类似于:

    entry  exit  state  change
0       0   NaN    0.0     NaN
1       1   NaN    1.0     1.0
2       0   NaN    1.0     0.0
3       1   NaN    1.0     0.0
4       0   NaN    1.0     0.0
5       0   0.0    1.0     0.0
6       0   1.0    0.0    -1.0
7       1   0.0    1.0     1.0
8       0   1.0    0.0    -1.0
9       0   0.0    0.0     0.0
10      0   0.0    0.0     0.0
11      0   0.0    0.0     0.0
12      0   1.0    0.0     0.0
13      0   0.0    0.0     0.0
   entry  exit  wantedexit
0      1     6          6
1      7     8         12

在此示例中,第一个在第1条出口处输入的交易在6点是正确的,它在第1条处输入并在5个第6条之后退出。

第3条上的条目被忽略,因为当前市场上有第1条上输入的订单。

在第7条和第8条上输入的第二笔交易不正确,因为该交易仅持续1条,而我的条件是在5条之后退出。

第8条的出口在那里,因为在第3条存在无效信号。

“ wantedexit”列应该是正确的出口栏索引。

0 个答案:

没有答案