2017-03-07 3 views
1

Ich möchte einen Pandas Datenrahmen zu den letzten 3 letzten Monaten filtern.pandas filter Daten der letzten 3 Monate

import pandas as pd 
dates = pd.DataFrame(['2016-11-01', '2016-12-01', '2017-01-01', '2017-02-01', '2017-03-01'], columns=['date']) 
dates.date = pd.DatetimeIndex(dates.date) 
import datetime 
today = datetime.date.today() 
first = today.replace(day=1) 
lastMonth = first - datetime.timedelta(days=90) 
print (lastMonth.strftime("%Y-%m")) 
dates[dates.date >= lastMonth] 

Diese Schnipselart funktioniert bereits, hat aber die Länge eines Monats, der auf 30 Tage fest codiert ist. Wie kann ich eine pd.Timedelta('-3 month') (die nicht so zu funktionieren scheint) verwenden, um eine robustere Funktion zu erreichen?

Antwort

2

Ich glaube, Sie brauchen offsets, weil Timedelta nur nicht mit Monaten funktioniert:

lastMonth = first - pd.offsets.MonthBegin(3) 
#lastMonth = first - pd.offsets.relativedelta(months=3) 

lastMonth = first - pd.Timedelta(months=3) 

ValueError: cannot construct a Timedelta from the passed arguments, allowed keywords are [weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds]

Verwandte Themen