【问题标题】:How do I check date time is in order with missing date times in data frame?如何检查日期时间是否符合数据框中缺少日期时间的顺序?
【发布时间】:2017-10-04 00:20:41
【问题描述】:

我有一个带有 4 列的 pandas 数据框,其中包含一些零 int 值和一些日期时间。我想创建一个带有 True/False 值的新列,以告诉我日期时间是否按时间顺序排列,即使有些是 0。

示例 df

P1.   P2.   P3.   P4. 
0.    2011.  0.   2015
2015. 0.    0.    2013

然后我想创建一个只有 T/F 的新列,具体取决于它是否按时间顺序排列,例如在上面的情况下,第 1 行为真,第 2 行为假。

我考虑过使用 if 和 else 的循环,但想知道是否有更简洁的方法。仅供参考,日期的完整格式为 2014-11-31 00:00:00。

提前致谢。

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    来源 DF:

    In [250]: x
    Out[250]:
          P1.     P2.  P3.   P4.
    0     0.0  2011.0  0.0  2015
    1  2015.0     0.0  0.0  2013
    

    解决方案:

    In [251]: x['new'] = x[x!=0].apply(lambda x: x.dropna().is_monotonic, axis=1)
    

    结果:

    In [252]: x
    Out[252]:
          P1.     P2.  P3.   P4.    new
    0     0.0  2011.0  0.0  2015   True
    1  2015.0     0.0  0.0  2013  False
    

    【讨论】:

      【解决方案2】:

      这是一个遵循逻辑的方法:

      • 使用apply方法循环遍历行axis = 1;
      • 对于每一行,去除零,计算差值并与零比较;
      • 如果没有一个差值小于零,则可以声明它是按时间顺序(升序);

      另外,如果该行包含零个或一个有效日期(非零),则此逻辑为真:

      df.apply(lambda r: ~(r[r != 0].diff() < 0).any(), 1)
      
      #0     True
      #1    False
      #dtype: bool
      

      【讨论】:

      • 看起来是一个不错的答案,但它真的很密集......你能解开一点吗?也许是一些 cmets?
      • @JDLong 添加了 cmets。
      猜你喜欢
      • 2019-12-25
      • 2016-10-24
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2011-02-19
      • 2012-05-27
      • 2013-03-01
      • 2015-08-08
      相关资源
      最近更新 更多