pandas select 行根据条件
pandas select rows according to condition
假设一个 pandas 数据帧
d = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
我怎样才能 select 满足 'a'>1, 'b'<6 and 7<='c'<=9
的所有行?
在这种情况下,它应该相当于数据框的第二行。
在解决方案中,假设有一个带有 k
键的通用数据框。
你可以使用 query
In [233]: d.query('a>1 and b<6 and 7<=c<=9')
Out[233]:
a b c
1 2 5 8
另外,你也可以
In [234]: d[(d.a>1) & (d.b<6) & (d.c>=7) & (d.c<=9)]
Out[234]:
a b c
1 2 5 8
并且,pd.eval()
适用于包含大型数组的表达式
In [235]: d[pd.eval('(d.a>1) & (d.b<6) & (d.c>=7) & (d.c<=9)')]
Out[235]:
a b c
1 2 5 8
您可以直接索引数据帧,将所有条件放在括号内:
d[(d.a > 1) & (d.b < 6) & (d.c <= 9) & (d.c >= 7)]
对于 'or' 条件,在条件之间使用竖线 |
。
假设一个 pandas 数据帧
d = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
我怎样才能 select 满足 'a'>1, 'b'<6 and 7<='c'<=9
的所有行?
在这种情况下,它应该相当于数据框的第二行。
在解决方案中,假设有一个带有 k
键的通用数据框。
你可以使用 query
In [233]: d.query('a>1 and b<6 and 7<=c<=9')
Out[233]:
a b c
1 2 5 8
另外,你也可以
In [234]: d[(d.a>1) & (d.b<6) & (d.c>=7) & (d.c<=9)]
Out[234]:
a b c
1 2 5 8
并且,pd.eval()
适用于包含大型数组的表达式
In [235]: d[pd.eval('(d.a>1) & (d.b<6) & (d.c>=7) & (d.c<=9)')]
Out[235]:
a b c
1 2 5 8
您可以直接索引数据帧,将所有条件放在括号内:
d[(d.a > 1) & (d.b < 6) & (d.c <= 9) & (d.c >= 7)]
对于 'or' 条件,在条件之间使用竖线 |
。