Python 如何在连续值块之间替换值

Python 如何在连续值块之间替换值,python,arrays,pandas,numpy,dataframe,Python,Arrays,Pandas,Numpy,Dataframe,我有这样一份清单: 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] 由于最大值只是最后一

我有这样一份清单:

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


最大值是否总是NaN之前的最后一个?是的,它总是后跟NaN,但最后一个元素可能是最大值
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]