Pandas - Python, удаляя строки на основе столбца Date
Я пытаюсь удалить строки фрейма данных на основе одного столбца даты; [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]
.
Может ли кто-нибудь предоставить правильное решение?
Ответы
Ответ 1
Вы можете просто отфильтровать их:
df[(df['Delivery Date'].dt.year == 1970) | (df['Delivery Date'] >= sixmonthago)]
Это возвращает все строки, в которых находится год 1970, или дата меньше 6 месяцев.
Вы можете использовать логическое индексирование и передавать несколько условий для фильтрации df, для нескольких условий вам нужно использовать операторы массива, поэтому |
вместо or
и скобки вокруг условий из-за приоритета оператора.
Проверьте документы для объяснения булевское индексирование
Ответ 2
Убедитесь, что сам расчет является точным для "6 месяцев". Возможно, вы не захотите быть hardcoding через 188 дней. Не все месяцы сделаны одинаково.
from datetime import date
from dateutil.relativedelta import relativedelta
#http://stackoverflow.com/info/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)