我有一个非常大的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']")