2017-05-05 13 views
3

私はいくつかのゼロのint値といくつかの日付時刻を含む4列のpandasデータフレームを持っています。私は日付の時間が時系列順になっている場合、いくつかは、私は、新しいを作りたい0データフレームに日付時刻がないため、日付時刻を確認するにはどうすればよいですか?

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

dfをしているにもかかわらず、私に教えて真/偽値を持つ新しい列を作成したいです列はちょうどそれが時系列順であるかどうかに応じてT/Fを持つ上記の場合、行1は真、行2は偽です。

私はifとelseを使ってループを考えましたが、よりクリーンな方法があるかどうか疑問に思っていました。 FYIの日付はフルフォーマットの2014-11-31 00:00:00です。

ありがとうございます。ここ

答えて

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 
2

ロジック以下の方法である:

  • 使用= 1行軸を通るループにapply方法。
  • 各行について、ゼロを削除し、その差を計算してゼロと比較します。
  • 違いが0より小さい場合は、それが時間順(昇順)であると主張できます。

プラス、行が0または1の有効な日付(非ゼロ)が含まれている場合、このロジックは本当与える:

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

#0  True 
#1 False 
#dtype: bool 
+0

が良い答えのように見えるが、それは本当に濃密だ...あなたは少しことをアンパックすることができますか?多分いくつかのコメント? –

+1

@JDLongコメントを追加しました。 – Psidom

関連する問題