Обновление столбца pandas для замены значений на np.nan, если значение встречается один раз, а затем сбросить еще раз, иначе - PullRequest
0 голосов
/ 09 декабря 2018

Название очень запутанное, поэтому позвольте мне объяснить.У меня есть столбец панд:

x   | desired x
1.5 | 1
1   | 1
1   | 1         
1   | 1
1   | 1
0   | 0
0   | 0
0   | 0
0   | 0
1   | 0
0   | 0
-1.5|-1
-1  |-1
-1  |-1
-1  |-1
0   | 0  
0   | 0
0   | 0
0   | 0
-1  | 0
0   | 0
0   | 0
1.5 | 1

...

В настоящее время я решил эту проблему с помощью itertuples:

 currval = np.nan
for idx in df.itertuples():
    if idx[33] == 1.5: 
        currval = 1
    elif idx[33] == -1.5:
        currval = -1
    elif idx[32] <> "":
        currval = np.nan
    else: 
        next
    df.loc[idx.Index,'refPos2'] = currval

однако этот код работает слишком медленнои задавался вопросом, есть ли у кого-нибудь идеи о том, как векторизовать это.

Спасибо!

1 Ответ

0 голосов
/ 09 декабря 2018

Постановка задачи, которую я понял из комментариев, вот решение:

for index, item in enumerate(a): ## a is your list [-1.5,1,1,0,1,1.5]
    if item == 1.5:
       a[index] = 1
    elif item == -1.5:
       a[index] = -1
    elif a[index] == 0:
        a[index] = 0
    elif a[index] == 1 and a[index-1] ==0:
        a[index] = 0
    else:
        a[index] =1
...