python - 比 Pandas 的 isin 函数更快地提取条件行的方法
问题描述
我有一个非常大的熊猫数据框格式的知识图,如下所示。
这个数据框KG
有超过 1 亿行。
公斤:
pred subj obj
0 nationality BART USA
1 placeOfBirth BART NEWYORK
2 locatedIn NEWYORK USA
... ... ... ...
116390740 hasFather BART HOMMER
116390741 nationality HOMMER USA
116390743 placeOfBirth HOMMER NEWYORK
我试图从这个 KG 中得到一个具有特定主题值的行。
使用 subj 列作为系列,我尝试通过使用isin()
如下所示的函数生成布尔系列来索引 KG。
KG[KG['subj'].isin(['BART', 'NEWYORK'])]
我想要的输出是
pred subj obj
0 nationality BART USA
1 placeOfBirth BART NEWYORK
2 locatedIn NEWYORK USA
116390740 hasFather BART HOMMER
我必须重复以上
但上述方法耗时较长。有没有比这种方法更有效地减少时间的方法?
谢谢!
解决方案
您可以set/sort index
然后选择所需的值:根据索引值查找行比根据列值查找行更快。对索引进行排序时速度更快。
df = df.set_index('subj')
df = df.sort_index()
result = df.loc[['BART', 'NEWYORK']]
您可以在设置多索引后尝试查询:
df = df.set_index(['subj','obj'])
df = df.sort_index()
df.query("subj in ['BART','NEWYORK'] & obj in ['USA','HOMMER']")
推荐阅读
- c++ - 尝试在 C++ 中实现可变参数 min() 函数
- google-chrome-extension - Chrome 扩展:创建新标签并附加监听器
- sql - 在 SQL Server 存储过程结果中将日期转换为字符串
- numpy - 如何获取不在元组中的 nd.array 元素的索引
- swift - 从 SwiftUI 转到 UIKit 的另一个视图?
- javascript - 如何导入csv文件并在html表上显示数据然后保存在asp .net核心的sql数据库中
- python - 如何在 Glue python 作业脚本中表示类型编号的排序键
- typescript - 打字稿泛型-“扩展对象”毫无意义吗?最佳做法是什么?
- machine-learning - 根据调查答案将新学生与教练匹配使用哪种方法
- c++ - 如何将此memcpy转换为for?