我有一个数据框,其中包含在特定时间范围内汇总的数据,其中' date'作为其中一列。现在,每天都会向此聚合数据添加具有完全相同列的新数据。现在我想对这个聚合数据应用一个过滤器,该帖子会追加新的每日数据,我只需要最近九个月的数据。
假设df_old是您的聚合数据,而新数据是df_new。目前我正在这样做
#Append new data to old aggregated data with same columns
df_old=df_old.append(df_new)
df_old['date']=pd.to_datetime(df_old['date'])
max_date=max(df_old['date']
df_old['date_diff']=(max_date - df_old['date'])
##Considering a calender month has 30 days and three months have 31 days
df_old.loc[df_old.date_diff <=273]
现在我知道上面的方法涉及硬编码并且效率不高。如果有人可以通过一些自动化方式帮助我,我将不胜感激。
答案 0 :(得分:2)
您可以动态生成6个月的日期
from datetime import date
from dateutil.relativedelta import relativedelta
six_months_old = date.today() + relativedelta(months=-6)
six_months_old
#datetime.date(2016, 9, 5)
现在使用此值来过滤数据框
df_old = df_old.append(df_new)
df_old['date'] = pd.to_datetime(df_old['date'])
max_date = max(df_old['date']
result_df = df_old.loc[(df_old['date'] >= six_months_old)]
答案 1 :(得分:0)
这里有更多&#34; Pandaic&#34;溶液:
数据:
In [40]: df = pd.DataFrame(pd.date_range('2000-01-01', freq='29D', periods=15), columns=['Date'])
In [41]: df
Out[41]:
Date
0 2000-01-01
1 2000-01-30
2 2000-02-28
3 2000-03-28
4 2000-04-26
5 2000-05-25
6 2000-06-23
7 2000-07-22
8 2000-08-20
9 2000-09-18
10 2000-10-17
11 2000-11-15
12 2000-12-14
13 2001-01-12
14 2001-02-10
解决方案:
In [42]: df.loc[df['Date'] > df['Date'].max() - pd.DateOffset(months=9)]
Out[42]:
Date
5 2000-05-25
6 2000-06-23
7 2000-07-22
8 2000-08-20
9 2000-09-18
10 2000-10-17
11 2000-11-15
12 2000-12-14
13 2001-01-12
14 2001-02-10