python индекс данных в состоянии np - PullRequest
0 голосов
/ 28 апреля 2020

Мне нужно применить несколько условий в кадре данных для заполнения нового столбца.
Мне нужно что-то, учитывающее последнее значение в условии. это псевдокод:

  if a > b & a(-1) < b & c[at last valid value up to the current row] != 1 -----> '1'
    if a < b & c[at last valid value up to the current row] == '1'           -----> '2'

это мой код, который не очень хорошо работает, потому что я обнаружил, что отсутствуют последовательные 1 и 2:

df['c'] = ''

conditions = [
    (df['a'].gt(df['b']) &
     df['a'].shift().lt(df['b']) &
    ((df['c'].iloc[df['c'].notna()[::-1].idxmax()] != '1')))
    ,
    df['a'].lt(df['b']) & (df['c'].iloc[df['c'].notna()[::-1].idxmax()] == '1')
]

choices = [1, 2]
df['c'] = np.select(conditions, choices, default='')
df

это пример :

   a       b        c
1.18891 1.189863    
1.18934 1.189777    
1.18977 1.189724    1
1.19003 1.189681    
1.19022 1.189645    
1.19058 1.189622    
1.19021 1.189570    
1.19104 1.189585    
1.19084 1.189603    
1.19096 1.189645    
1.19128 1.189713    
1.19120 1.189777    
1.19104 1.189840    
1.19173 1.189955    
1.19176 1.190062    
1.19226 1.190209    
1.19123 1.190295    
1.19307 1.190490    
1.19255 1.190656    
1.19181 1.190790    
1.19228 1.190942    
1.19157 1.191076    
1.19124 1.191182    
1.19129 1.191271    1
1.19165 1.191356    1         <--------- duplicated!!!!
1.19126 1.191412    
1.19156 1.191473    1
1.19048 1.191469    
1.18925 1.191425    
...