我有一个形状为(2,12)的数组ab
ab = np.array([[0,3,6,3,np.nan,3,7,3,5,4,3,np.nan],
[5,9,np.nan,3,7,5,3,6,4,np.nan,np.nan,np.nan]])
我试图获取两行之间连续的非空值的最长段。从上面的例子中,输出应该是:
[[3. 7. 3. 5.]
[5. 3. 6. 4.]]
我在这里使用了为类似问题提出的解决方案:Find longest subsequence without NaN values in set of series,将数组转换为 Dataframe 后:
df = pd.DataFrame(ab.T)
seq = np.array(df.dropna(how='any').index)
longest_seq = max(np.split(seq, np.where(np.diff(seq)!=1)[0]+1), key=len)
print(df.iloc[longest_seq])
0 1
5 3.0 5.0
6 7.0 3.0
7 3.0 6.0
8 5.0 4.0
但是,是否有可能只使用numpy找到解决方案?
谢谢
1条答案
按热度按时间j8ag8udp1#
我不确定您的代码是否能处理这样的序列长度在不同行之间不同的情况,相反,我将逐行进行:
我对numpy不太熟悉,所以我把你的问题当作一个练习。可能有很多方法可以改进代码。