Посчитать пропуски в списке
Второй и последний вопрос (впринципе этот вопрос можно решить через перебор for i in, но это много строк и не так как надо, наверняка есть проcтой способ).
Как поcчитать кол-во nan в списке a = [np.nan,np.nan,8,np.nan,6,np.nan,np.nan,9,np.nan,np.nan,np.nan,3,np.nan] между 3-мя числовыми последними значениями и получить по ним список? Тоесть в списке есть последнии 3 значения это 6,9,3. Начиная с конца и пропуская первые nan, кол-во nan между 3 и 9 = 3. Между 9 и 6 = 2. Между 6 и 8 = 1. В таком случае ответ будет [1,2,3].
Ответы (3 шт):
from itertools import groupby
import numpy as np
A = [np.nan,np.nan,8,np.nan,6,np.nan,np.nan,9,np.nan,np.nan,np.nan,3,np.nan]
B = [len(list(y)) for x, y in groupby(A) if (x is np.nan)]
print(B)
>>[2, 1, 2, 3, 1]
Не уверен, что предлагаемое решение сильно уменьшит количество строк и будет самым эффективным, но попробовать можно так:
import numpy as np
a = np.array([np.nan,np.nan,8,np.nan,6,np.nan,np.nan,9,np.nan,np.nan,np.nan,3,np.nan,np.nan,np.nan,np.nan,1,np.nan])
for i in np.split(a, np.ravel(np.argwhere(~np.isnan(a)))):
print(np.count_nonzero(np.isnan(i)))
получим:
2
1
2
3
4
1
еще один похожий на уже предложенные способ:
import pandas as pd
idx = pd.Series(a).dropna().index
res = [j-i-1 for i,j in zip(idx,idx[1:])]
print(res) # [1, 2, 3]