使用.loc和多个选择标准

时间:2015-12-01 21:30:59

标签: python numpy pandas

我想运行.loc来捕获需要多个条件的数据子集。类似的东西:

df.loc[(
    df["date"] > datetime.datetime.strptime('Jan 1 2000', '%b %d %Y').date() & 
    df["date"] < datetime.datetime.strptime('Jan 1 2009', '%b %d %Y').date() )]

当然,这种语法不正确。什么是正确的语法?

1 个答案:

答案 0 :(得分:1)

当复合布尔条件时,由于运算符优先级需要添加括号,因此以下内容应该有效:

df.loc[( df["date"] > datetime.datetime.strptime('Jan 1 2000', '%b %d %Y').date()) & (df["date"] < datetime.datetime.strptime('Jan 1 2009', '%b %d %Y').date() )]

此外,我认为传递日期字符串进行比较会更容易:

In [6]:    
df = pd.DataFrame({'a':pd.date_range(start=dt.datetime(2015,1,1), end=dt.datetime(2015,2,4))})
df[(df['a'] > '2015/01/14') & (df['a'] < '2015/02/01')]

Out[6]:
            a
14 2015-01-15
15 2015-01-16
16 2015-01-17
17 2015-01-18
18 2015-01-19
19 2015-01-20
20 2015-01-21
21 2015-01-22
22 2015-01-23
23 2015-01-24
24 2015-01-25
25 2015-01-26
26 2015-01-27
27 2015-01-28
28 2015-01-29
29 2015-01-30
30 2015-01-31