2017-03-05 78 views
2

我有一个数据框,它包含在特定时间范围内汇总的数据,'date'是其中一列。现在每天都有一组具有完全相同列的新数据添加到此聚合数据中。现在我想对这些汇总数据应用一个过滤器,这个帖子附加了新的每日数据,我只需要最近九个月的数据。自动提取python中最近9个月的数据

假设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] 

现在我知道上面的方法涉及硬编码,效率不高。我很感激,如果有人可以帮助一些自动化的方式做到这一点。

回答

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)] 
+0

感谢Vikash !! ....多数民众赞成我正在寻找....我想避免任何硬编码。 – user2906657

+0

@ user2906657欢迎您:)如果符合预期,请勾选答案。谢谢 :) –

0

这里是一个比较 “Pandaic” 的解决方案:

数据:

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