以下のダミーデータがあれば、私の目標は従業員が2014年末に雇用されたかどうかを判断し、新しいブール型列をこの効果に戻すことです。パンダ:条件文が期待どおりに機能しない
name hire_date termination_date grade_2014
James 1999-01-01 NaT 10.0
Amara 2015-12-07 NaT NaN
Haj 2012-08-13 2016-04-04 9.0
Bill 1999-01-12 2014-02-04 7.0
これを達成するために、次のリストを作成しました。
from itertools import izip
df['active_end_2014'] = ['true' if
(hire < pd.Timestamp(2014, 12, 31) and termination == pd.NaT) |
(termination > pd.Timestamp(2015, 1, 1) and grade_2014 != np.nan)
else 'false' for grade_2014, termination, hire in izip(df['grade_2014'],
df['termination_date'],
df['hire_date'])]
「false」を取得したJames以外のすべての従業員に対して正しいブール値が返されます。
hire < pd.Timestamp(2014, 12, 31) and termination == pd.NaT
が、これは括弧の問題やpd.Nat
の選択である:確かに、彼はこの条件を満たしているとして、彼は、 '真' に割り当てられていないのはなぜ
df[df['name'] == 'James']
name hire_date termination_date grade_2014 active_end_2014
James 1999-01-01 NaT 10.0 false
?あるいは、私はどのようにしてもっと広く包括的にリストを構築していますか?
「pd.NaT」は分かりませんが、「NaN」、「NaN == NaN」のようなものは偽を返します。 – polku