这是一种比Pandas的isin函数更快的提取条件行的方法



我有一个非常大的pandas数据帧格式的知识图,如下所示。

该数据帧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的特定值。

使用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']")

相关内容

  • 没有找到相关文章

最新更新