Python 如何检查数据框中缺少的日期时间是否符合顺序?

Python 如何检查数据框中缺少的日期时间是否符合顺序?,python,pandas,datetime,dataframe,Python,Pandas,Datetime,Dataframe,我有一个熊猫数据框,有4列,其中包含一些零整数值和一些日期时间。我想创建一个具有真/假值的新列,以告诉我日期时间是否按时间顺序排列,即使有些是0 示例df P1. P2. P3. P4. 0. 2011. 0. 2015 2015. 0. 0. 2013 然后,我想创建一个新列,根据它是否按时间顺序排列(例如,在上面的情况下,第1行为true,第2行为false),它只包含一个T/F 我曾考虑过使用if和else进行循环,但不知道是否有更干净的方法。仅供参

我有一个熊猫数据框,有4列,其中包含一些零整数值和一些日期时间。我想创建一个具有真/假值的新列,以告诉我日期时间是否按时间顺序排列,即使有些是0

示例df

P1.   P2.   P3.   P4. 
0.    2011.  0.   2015
2015. 0.    0.    2013
然后,我想创建一个新列,根据它是否按时间顺序排列(例如,在上面的情况下,第1行为true,第2行为false),它只包含一个T/F

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


提前感谢。

下面是一个遵循逻辑的方法:

  • 使用
    apply
    方法循环行轴=1
  • 对于每行,删除零,计算差值并与零进行比较
  • 如果没有一个差小于零,那么您可以声称它是按时间顺序(升序)排列的
另外,如果行包含零或一个有效日期(非零),则此逻辑将为true:

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

#0     True
#1    False
#dtype: bool
df.apply(lambda r:~(r[r!=0].diff()<0.any(),1)
#0对
#1错误
#数据类型:bool

源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
解决方案:

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
结果:

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

看起来是个很好的答案,但那真的很难回答。。。你能把它打开一点吗?也许有一些评论?@JDLong补充道。