##質問内容
pandasのデータフレーム処理で、時間の比較を行いたいのですが、Nanの処理で行き詰まっています。
二つの時刻が入ったtime1とtime2という変数があります。これらの大小を比較し、前者が早い場合はTrue,後者が早い場合はFalse,Nan値についてはNanを返したいのですが、Nanの処理がうまくいきません。そこで、NanもFalseに判定されていることから、大なり小なりの両方を比較し、両方FalseのものをNanにするという方法で行おうとしたのですが、これもまたif分岐が昨日しません。
def judge_early_much(judge1,judge2): if (judge1 is False) and (judge2 is False): print('1') return np.nan else: return judge1 #pd.isnull判定がうまくいかないので、両方falseの方ものをnanにする judge_early = time1 > time2 judge_early_inverse = time1 < time2 df['judge_early'] = judge_early_much(judge_early,judge_early_inverse) y1 = judge_early.value_counts() y2 = judge_early_inverse.value_counts() y3 = df['judge_early'].value_counts() print(y1,y2,y3)
###出力結果
True 83066 False 28160 dtype: int64 False 103247 True 7979 dtype: int64 True 83066 False 28160 Name: judge_early, dtype: int64
time1およびtime2の中身例は双方とも以下のような形です。当然配列の長さはは同じです。
26 06:59:00
27 06:59:00
28 06:59:00
29 06:59:00
...
111196 NaT
111197 NaT
111198 NaT
111199 NaT
<class 'pandas.core.series.Series'>
このように、y1とy3の出力が同じになっており、両方Falseの判定がうまくいっていません。
##試したこと
時刻比較の部分を、関数化し、time1がNaTならnp.nanを返すようにしたりもしましたが、下記エラーが出て判定できませんでした。
def judge_early(start,early): if pd.isnull(start): return np.nan elif pd.isnull(early): return np.nan else: judge = start > early return judge judge = judge_early(time1,time2)
###出力
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-66-b181776ef32c> in <module> 7 judge = start > early 8 return judge ----> 9 judge = judge_early(time1,time2) <ipython-input-66-b181776ef32c> in judge_early(start, early) 1 def judge_early(start,early): ----> 2 if pd.isnull(start): 3 return np.nan 4 elif pd.isnull(early): 5 return np.nan ~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in __nonzero__(self) 1476 raise ValueError("The truth value of a {0} is ambiguous. " 1477 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." -> 1478 .format(self.__class__.__name__)) 1479 1480 __bool__ = __nonzero__ ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー