如何检查日期时间是否与数据框中缺少日期时间一致?

时间:2017-05-05 13:30:29

标签: python pandas datetime dataframe

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

示例df

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是遵循逻辑的方法:

  • 使用apply方法循环遍历行 axis = 1 ;
  • 对于每一行,删除零,计算差值并与零进行比较;
  • 如果差异不小于零,那么您可以声称它是按时间顺序(升序);

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

df.apply(lambda r: ~(r[r != 0].diff() < 0).any(), 1)

#0     True
#1    False
#dtype: bool

答案 1 :(得分:2)

来源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