1つの日付列に基づいてデータフレームの行を削除しようとしています。 [Delivery Date]
6か月以上古いが「1970」年に等しくない行を削除する必要があります。
2つの変数を作成しました。
from datetime import date, timedelta
sixmonthago = date.today() - timedelta(188)
import time
nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y')
しかし、[Delivery Date]
列を使用して、これらの2つの変数に基づいて行を削除する方法がわかりません。
誰かが正しい解決策を提供できますか?
あなたはそれらを取り除くことができます:
df[(df['Delivery Date'].dt.year == 1970) | (df['Delivery Date'] >= sixmonthago)]
これは、年が1970であるか、日付が6か月未満のすべての行を返します。
ブールインデックスを使用し、複数の条件を渡してdfをフィルタリングできます。複数の条件については、配列演算子を使用する必要があるため、|
の代わりにor
を使用し、演算子の優先順位のために条件を括弧で囲みます。
boolean indexing の説明については、ドキュメントを確認してください
計算自体が「6か月」前まで正確であることを確認してください。 188日以内にハードコーディングしたくない場合があります。すべての月が同じように作られるわけではありません。
from datetime import date
from dateutil.relativedelta import relativedelta
#http://stackoverflow.com/questions/546321/how-do-i-calculate-the-date-six-months-from-the-current-date-using-the-datetime
six_months = date.today() - relativedelta( months = +6 )
その後、次のロジックを適用できます。
import time
nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y')
df = df[(df['Delivery Date'].dt.year == nineteen_seventy.tm_year) | (df['Delivery Date'] >= six_months)]
データフレームのセクションを本当に削除したい場合は、以下を実行できます。
df = df[(df['Delivery Date'].dt.year != nineteen_seventy.tm_year) | (df['Delivery Date'] < six_months)].drop(df.columns)