我有一个包含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的完整格式。
提前致谢。
答案 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