【问题标题】:How to find the longest sequence of NaNs in Dataframe?如何在 Dataframe 中找到最长的 NaN 序列?
【发布时间】:2020-12-15 17:36:19
【问题描述】:

假设我有一个这样的数据框:

Time                           A            B           C             D                                                               
2019-06-17 08:45:00     12089.89     12089.89    12087.71      12087.71      
2019-06-17 08:46:00          NaN          NaN    12087.71      12087.91      
2019-06-17 08:47:00          NaN     12088.21    12084.21      12085.21      
2019-06-17 08:48:00          NaN     12090.21         NaN           NaN      
2019-06-17 08:49:00          NaN     12090.21         NaN           NaN     
2019-06-17 08:50:00          NaN          NaN    12504.11           NaN     
2019-06-17 08:51:00          NaN          NaN    12503.11      12503.11    
2019-06-17 08:52:00     12504.11          NaN    12503.11      12503.11      
2019-06-17 08:53:00     12503.61     12503.61    12503.61      12503.61      
2019-06-17 08:54:00     12503.61     12503.61    12503.11      12503.11     

如何找到整个df中最长的不间断NaN序列的长度? (在示例中为 6 )有效吗?

编辑:忘了强调“高效”这个词,因为 df 大约 1mio 行长

【问题讨论】:

  • @Manakin 最长 不间断 NaN 序列。
  • @QuangHoang 啊,我错过了,很好的答案!
  • @Prune 你确定它是重复的吗?
  • 标记的重复显示如何计算一列数据中的数字序列。还有其他人在其他类型的列中计算序列;我觉得这个是最简单易用的。我愿意被谈论到另一个职位......
  • @Prune 虽然它没有给出每个序列的 length。它所做的只是识别块。

标签: python pandas numpy dataframe indexing


【解决方案1】:

让我们尝试apply 一个用户定义的函数,它反过来使用cumsum() 来识别块:

def max_na(s):
    isna = s.isna()
    blocks = (~isna).cumsum()
    return isna.groupby(blocks).sum().max()

df.apply(max_na).max()
# 6.0

【讨论】:

  • 这是否以矢量化方式工作? (1 mio 行数据框,忘了提)
  • @La-Li-Lu-Le-Lo 是的。它是矢量化的(按列)
猜你喜欢
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2014-05-22
  • 2011-06-15
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多