我将假设Time
和Product
是中的列DataFrame
, df
是的实例DataFrame
,而其他变量是标量值:
现在,您必须引用DataFrame
实例:
k1 = df.loc[(df.Product == p_id) & (df.Time >= start_time) & (df.Time < end_time), ['Time', 'Product']]
由于&
运算符与比较运算符之间的优先级,因此括号也是必需的。该&
运算符实际上是一个重载的按位运算符,其优先级与算术运算符相同,而算术运算符的优先级又高于比较运算符。
在pandas
0.13中,DataFrame.query()
将提供一种新的实验方法。这与子集对select
参数取模非常相似:
与query()
您一起这样做:
df[['Time', 'Product']].query('Product == p_id and Month < mn and Year == yr')
这是一个简单的例子:
In [9]: df = DataFrame({'gender': np.random.choice(['m', 'f'], size=10), 'price': poisson(100, size=10)})
In [10]: df
Out[10]:
gender price
0 m 89
1 f 123
2 f 100
3 m 104
4 m 98
5 m 103
6 f 100
7 f 109
8 f 95
9 m 87
In [11]: df.query('gender == "m" and price < 100')
Out[11]:
gender price
0 m 89
4 m 98
9 m 87
您感兴趣的最终查询甚至可以利用链式比较,如下所示:
k1 = df[['Time', 'Product']].query('Product == p_id and start_time <= Time < end_time')