簡體   English   中英

如何在連續值塊之間替換值

[英]How to replace values among blocks of consecutive values

我有一個這樣的列表:

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]

由於最大值只是最后一個非 NaN 值,因此您可以通過檢查給定值是否不是NaN並且以下值也不是,來獲取要設置為-1的值的索引:

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])
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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM