我不熟悉python数据表,下面是我要介绍的tutorial
如何筛选出列表中包含特定列中的值的行
基本上,这就是我正在使用的代码:
import datatable as dt
sfr = dt.fread(os.path.join(dirName, 'Results.csv'))
sfr
Out[25]:
| ioid itemtype date itemid tid value
-------- + ---------- -------- -------- ------- ------------ -------
0 | 1 1 7-1-2022 9015 531 0.0283
1 | 1 1 7-1-2022 9015 532 0.0071
2 | 1 1 7-1-2022 9016 534 0.0065
3 | 1 1 7-1-2022 9017 1018 0.0005
我正在努力做到以下几点
ids = [9016, 9017]
sft[dt.f.itemid.isin(ids)]
但是,我无法使语法正常工作
期望输出为:
| ioid itemtype date itemid tid value
-------- + ---------- -------- -------- ------- ------------ -------
2 | 1 1 7-1-2022 9016 534 0.0065
3 | 1 1 7-1-2022 9017 1018 0.0005
由于Pydatatable不显式支持根据值列表进行过滤(请参见feature request),因此下面的解决方案可能不太直观。尽管如此,它还是通过利用datatable连接函数实现了这种过滤的功能:
这些步骤包括:
不过这里有一个问题:当前联接有一些限制-它只剩下外部联接,并且联接列(
itemid
在上面的解决方案中sfr
)必须具有唯一的值,否则sfr.key = "itemid"
会引发此错误:由于这些强有力的假设,当
itemid
包含非唯一值时,它将不起作用。在这种情况下,我们将“连接”转过来,并在添加到包含列表的框架的虚拟列上添加额外的筛选器:此解决方案将始终有效,但由于总是连接所有行并进行额外筛选以删除不匹配的行,因此效率明显较低。有关Pydatatable联接的当前状态的更多详细信息,请参见文档here
更新
为了完整性,我添加了另一个(可以说是更直接的)解决方案,该解决方案是Pasha(Pydatatable的创建者和维护者)从this answer借用的:
在实现此功能请求https://github.com/h2oai/datatable/issues/699之前,上面显示的解决方案之一会根据值列表进行过滤
相关问题 更多 >
编程相关推荐