создание условий на np.where в Pandas на основе значения в текущем столбце - PullRequest
0 голосов
/ 04 мая 2018

У меня есть датафрейм в Pandas (подмножество ниже).

DATE       IN 200D_MA   TEST    
10/30/2013  0   1        0  
10/31/2013  0   1        0  
11/1/2013   1   1        1  IN & 200D_MA both =1, results 1
11/4/2013   0   1        1  PREVIOUS TEST ROW =1 & 200DM_A = 1, TEST ans=1
11/5/2013   0   1        1  PREVIOUS TEST ROW =1 & 200DM_A = 1, TEST ans=1
11/6/2013   0   1        1  
11/7/2013   0   1        1  
11/8/2013   0   1        1  
11/11/2013  0   0        0  PREVIOUS TEST ROW =1 & 200DM_A = 0, TEST ans=0

Это легко сделать в Excel, поэтому я подумал, что это будет легко сделать в Python. У меня есть этот код, используя вложенные формулы np.where

df3['TEST'] = np.where( (df3['IN'] == 1) & (df3['200D_MA'] == 1),1,\
                       np.where( (df3['TEST'].shift(-1) == 1)\
                       & (df3['200D_MA'] == 1),1,0)) 

но выдает KeyError: 'IN'>, вероятно, потому что я использую условие из столбца, которое еще не было создано. Может кто-нибудь помочь мне разобраться, как это сделать?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Я думаю, что вы можете использовать прокрутку для вычисления предыдущей строки TEST.

df['TEST'] = (df['IN 200D_MA'] & df['IN 200D_MA'].rolling(2).min().shift(1)).astype(int)

Выход:

            DATE  IN 200D_MA  TEST
10/30/2013     0           1     0
10/31/2013     0           1     0
11/1/2013      1           1     1
11/4/2013      0           1     1
11/5/2013      0           1     1
11/6/2013      0           1     1
11/7/2013      0           1     1
11/8/2013      0           1     1
11/11/2013     0           0     0
0 голосов
/ 04 мая 2018

Похоже, вам нужно условие ffill

df['TEST']=df.loc[df.IN==1,'IN']
df.loc[df['200D_MA']==1,'TEST']=df.loc[df['200D_MA']==1,'TEST'].ffill()
df.fillna(0,inplace=True)
df.TEST=df.TEST.astype(int)
df
Out[349]: 
         DATE  IN  200D_MA  TEST
0  10/30/2013   0        1     0
1  10/31/2013   0        1     0
2   11/1/2013   1        1     1
3   11/4/2013   0        1     1
4   11/5/2013   0        1     1
5   11/6/2013   0        1     1
6   11/7/2013   0        1     1
7   11/8/2013   0        1     1
8  11/11/2013   0        0     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...