按天数范围过滤Pandas数据帧:今天 - 今天+ 1年

时间:2017-04-14 17:11:17

标签: python pandas

我可以使用日期范围过滤数据框:

df[(df['Due Date'] >= '2017-01-01') & (df['Due Date'] <= '2017-02-01')]

但我希望能够过滤一年

3 个答案:

答案 0 :(得分:5)

IIUC你可以这样做:

In [99]: from dateutil.relativedelta import relativedelta

In [100]: today = pd.datetime.today()

In [101]: today_next_year = today + relativedelta(years=1)

In [102]: df.loc[df['Due Date'].between(today, today_next_year)]
Out[102]:
     Due Date  OtherColumn
9  2017-06-30            9
10 2017-09-30           10
11 2017-12-31           11
12 2018-03-31           12

答案 1 :(得分:2)

只是为了确保您的专栏是日期时间,请从此

开始
df['Due Date'] = pd.to_datetime(df['Due Date'])

考虑数据框df

df = pd.DataFrame({
        'Due Date': pd.date_range('2015', periods=20, freq='Q'),
        'OtherColumn': range(20)
    })

您应该可以通过year日期访问者

访问dt
df[df['Due Date'].dt.year >= 2017]

     Due Date  OtherColumn
8  2017-03-31            8
9  2017-06-30            9
10 2017-09-30           10
11 2017-12-31           11
12 2018-03-31           12
13 2018-06-30           13
14 2018-09-30           14
15 2018-12-31           15
16 2019-03-31           16
17 2019-06-30           17
18 2019-09-30           18
19 2019-12-31           19

或者,您可以对索引

使用日期过滤
df.set_index('Due Date')['2017']

            OtherColumn
Due Date               
2017-03-31            8
2017-06-30            9
2017-09-30           10
2017-12-31           11

或者

df.set_index('Due Date')['2016':'2017']

            OtherColumn
Due Date               
2016-03-31            4
2016-06-30            5
2016-09-30            6
2016-12-31            7
2017-03-31            8
2017-06-30            9
2017-09-30           10
2017-12-31           11

答案 2 :(得分:1)

df['Due Date']转换为时间戳,然后您可以访问year属性进行过滤。例如:

df['Due Date'] = pd.to_datetime(df['Due date'], format='%Y-%m-%d')
df[(df['Due Date'].year >= 2017) & (df['Due Date'].year <= 2018)]
相关问题