python - 查找系列集中没有 NaN 值的最长子序列

标签 python pandas numpy

您好,我正在尝试找出一种方法,该方法可以找到一组序列中没有任何缺失(Nan)值的最长公共(public)连续子序列(在本例中为时间间隔)。这是一个示例数据框。

   time  s_1  s_2  s_3
0  1     2    2    Nan
1  2     3    Nan  Nan
2  3     3    2    2
3  4     5    3    10
4  5     8    4    3
5  6     Nan  Nan  7
6  7     5    2    Nan
7  8     Nan  3    Nan

对于这个小示例,“最佳”时间间隔为 3-5 或索引 2-4。真实的数据框更大并且包含更多系列。是否有可能找到有效的解决方案来解决这个问题?

非常感谢。

最佳答案

我通过一些设置更新了这个工作示例:

import pandas as pd
import numpy as np

s1 = [2,3,3,5,8,np.NAN,5,np.NAN,1]
s2 = [2,np.NAN,2,3,4,np.NAN,2,3,1]
s3 = [np.NAN,np.NAN,2,10,3,7,np.NAN,np.NAN,1]
data = {'time':np.arange(1,9+1),'s_1':s1,'s_2':s2,'s_3':s3}

df =  pd.DataFrame(data)
print(df)

这将创建一个您在上面发布的 DataFrame,但末尾有一个附加条目,因此将有两个具有连续索引的区域。

我认为这里最好的方法是删除所有丢失数据的行,然后计算剩余索引中的最长序列。像这样的事情应该可以解决问题:

sequence = np.array(df.dropna(how='any').index)    
longest_seq = max(np.split(sequence, np.where(np.diff(sequence) != 1)[0]+1), key=len)    
print(df.iloc[longest_seq])

这会给你:

   time  s_1  s_2   s_3
2     3  3.0  2.0   2.0
3     4  5.0  3.0  10.0
4     5  8.0  4.0   3.0

关于python - 查找系列集中没有 NaN 值的最长子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54066898/

相关文章:

python - KDB:如何在 Python 中使用 KDB 函数?

python - Django 使用 crispy 表单用 css 渲染表单字段

php - Apache:支持 [PHP|Python|Ruby] 的虚拟主机

python - 在 pandas groupby 之后为组中的每个唯一值分配唯一 ID

python - 在 numpy 或 scipy 中左逆?

python - numpy python 上的反向对角线

python - Pandas 数据帧 : apply function to all columns

python - pandas 根据之前的列生成新的列

python - Pandas - 不同值的滚动累积计数

python - 从逻辑矩阵到集合列表的最快方法