存储多对多关系的最佳方式,以便快速查看未来

时间:2015-08-09 18:36:57

标签: python pandas many-to-many

我有一个数据框,我在一个字段上进行多个正则表达式子字符串搜索,以确定哪些"系列"这个字符串属于。这是一个相当昂贵的搜索,所以我想在Pandas列中保存它的结果,以便更快地检索。 Pandas有一个很好的change方法来确定单个检索项是否在给定的查询集中,但我不确定如何完成逆操作。

这是一个简单的1行示例:

isin()

我希望能够查询包含特定家庭关系的所有行的DataFrame(例如" famA")。什么是最有效的方法?

1 个答案:

答案 0 :(得分:0)

从示例中很难说,但是可以存储家庭关系而不是单独的列吗?例如,您可以为每个族包含一个布尔列。类似的东西:

In [54]: df

Out[54]:
    FamA    FamB    FamC    FamD    FamE    text
0   True    True    False   False   True    the quick brown fox jumps over the lazy dog

看起来以这种方式填充框架并检查某个特定行中的特定行是否会很简单就好了。在数据框单元格中存储列表似乎不是一个好主意。如果您展示了如何从字符串生成族列表的示例,我可以通过这种方式帮助填充。另一个更接近你所拥有的建议是将家庭存储在单个字符串而不是列表中,例如

In [64]:
from pandas import DataFrame
example = DataFrame({"text": "the quick brown fox jumps over the lazy dog", "families": "famA famB famE"}, index=[0])
example

Out[64]:
    families    text
0   famA famB famE  the quick brown fox jumps over the lazy dog

然后你可以做

In [63]:
example.families.str.contains("famA")

Out[63]:
0    True
Name: families, dtype: bool