Как заменить значения среди блоков последовательных значений - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть такой список:

list_tmp = [np.NaN, np.NaN, 1, 2, 3, np.NaN, 1, 2, np.NaN, np.NaN, 1, 2, 3, 4, np.NaN]

Так что в этом списке есть блоки последовательных значений, разделенные NaN.

Как заменить значения перед максимумом каждого блока, например, на -1. Результат выглядит так:

list_tmp = [np.NaN, np.NaN, -1, -1, 3, np.NaN, -1, 2, np.NaN, np.NaN, -1, -1, -1, 4, np.NaN]

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Поскольку максимальное значение является только последним значением, отличным от NaN, вы можете получить индексы значений для установки на -1, проверив, не является ли данное значение NaN и ни является следующим:

a = np.array([np.NaN, np.NaN, 1, 2, 3, np.NaN, 1, 2, np.NaN, np.NaN, 1, 2, 3, 4, np.NaN])

a[~np.isnan(a) & ~np.isnan(np.r_[a[1:],np.nan])] = -1

print(a)
array([nan, nan, -1., -1.,  3., nan, -1.,  2., nan, nan, -1., -1., -1., 4., nan])
0 голосов
/ 21 апреля 2020
list_tmp = [np.NaN, np.NaN, 1, 2, 3, np.NaN, 1, 2, np.NaN, np.NaN, 1, 2, 3, 4, np.NaN]

for i in range(len(list_tmp)-1):
  if np.isnan(list_tmp[i])==False and np.isnan(list_tmp[i+1])==False:
    list_tmp[i] =-1

list_tmp

[nan, nan, -1, -1, 3, nan, -1, 2, nan, nan, -1, -1, -1, 4, nan]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...