python - 在 Python 中使用多个条件过滤数据的最佳算法

标签 python algorithm sorting search data-structures

我有一个多维和纯数值数据集,在概念上看起来像这样:

Id   Field1  Field2  Field3  
1    123     .05     10.33
2    234     .17     5.78
3    345     .01     0.23
4    456     .99     1233
...
...
...

我需要检索符合某些条件的已排序数据,如以下示例所示。

select * from data where Field1 > x and Field2 > y ordered by Field3 desc

对于过滤子句:

  • 条件只能是字段*“运算符”x,其中“运算符”可以是>、<、=、>=或<=,x可以是任意数字。
  • 条件相交(即,它们由 AND 而不是 OR 连接)。
  • “排序依据”字段可以是任何字段*。

为我所描述的用例实现数据结构和算法的最佳方法是什么?

假设数据集的大小适中,在 10 万行以下。

这里我使用 SQL 语法来解释我想要实现的目标。我不打算卸载 SQL 中的数据。并且数据集不需要像 Python 中的数据结构那样在 DataFrame 中实现。可以是栈/队列/列表/字典……

如有任何帮助,我们将不胜感激。

最佳答案

在 vanilla python 中,这可以使用 filter 模块来实现。

from collections import namedtuple

row = namedtuple('Row', ['id', 'field1', 'field2', 'field3'])


dset = [
    row(id=1, field1=123, field2=0.05, field3=10.33),
    row(id=2, field1=234, field2=0.17, field3=5.78),
    row(id=3, field1=345, field2=0.01, field3=0.23),
    row(id=4, field1=456, field2=0.99, field3=1233),

]

target = [
    row(id=2, field1=234, field2=0.17, field3=5.78),
    row(id=3, field1=345, field2=0.01, field3=0.23),
]

assert filter(lambda x: x.field1 > 200 and x.field3 < 10, dset) == target

关于python - 在 Python 中使用多个条件过滤数据的最佳算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557504/

相关文章:

Python 3.2 SQLite 3 错误与连接功能

python - 如何将日期格式作为参数传递给 Mysqldb 执行方法

algorithm - Ford-Fulkerson 方法的修改

algorithm - 在十亿的文件中找到一百个最大的数字

c++对内部带有类 vector 的类进行排序

python - 在另一个 python 脚本中调用 python 脚本时出现奇怪的错误

python - 通过远程 Active Directory 单点登录到 Django 站点

algorithm - 使用 Floyd-Warshall 算法计算 2 个顶点之间的路径数

Python - 如何对字母和数值列表进行排序?

angularjs - ngTable 不排序?