假设我有一个包含3列的数据框,全部都是浮点类型,将其命名为DT1。 现在,如果我想通过查询DT1从DT1创建另一个数据帧,那么第二个称为DT2。
DT2 = DT1.query(‘(column1/column2) == (column3/column2)’)
只有当等式的两边完全匹配时,这才有效。 如果我只想比较两边的整数结果怎么办?
像:
DT2 = DT1.query(‘(column1/column2).astype(int) == (column3/column2)’).astype(int)
上面的例子无法解决问题?
PS:
DT2 = DT1.loc(‘(DT1[column1]/DT1[column2]).astype(int) == (DT1[column3[/DT1[column2]).astype(int)’)
会奏效。我很好奇它是否可以通过查询工作。
谢谢!
答案 0 :(得分:4)
假设您有以下DF:
In [125]: df
Out[125]:
col1 col2 col3
0 2.11 1.1 2.101
1 1.00 1.0 3.000
2 4.40 2.2 4.900
您可以使用DataFrame.query(..., engine='python')
:
In [132]: df.query("col1 // col2 == col3 // col2", engine='python')
Out[132]:
col1 col2 col3
0 2.11 1.1 2.101
2 4.40 2.2 4.900
或DataFrame.eval(..., engine='python')
:
In [126]: df[df.eval("col1 // col2 == col3 // col2", engine='python')]
Out[126]:
col1 col2 col3
0 2.11 1.1 2.101
2 4.40 2.2 4.900
检查:
In [131]: ((df.col1 / df.col2).astype(int) == (df.col3 / df.col2).astype(int))
Out[131]:
0 True
1 False
2 True
dtype: bool