用于多对多关系的熊猫查询(评估)过滤器

时间:2019-03-04 16:57:49

标签: python pandas

说我有一个类型为list的列:

@PreUpdate
public void preUpdate() {
    this.getParent().setTimeUpdated(Instant.now());
}

并且我要匹配列表中的项目:

pd.DataFrame([[["item1", "item2"]]], columns=["a"])
     a
0   [item1, item2]

没有获得部分匹配项。

这可行,但可以给我部分匹配项:

mylist = ["item1", "item3"]

我在想的一种方法是在整个str.contains中使用整个单词,就像它在这里起作用一样:

df.query('a.str.join(" ").str.contains("|".join(@mylist))', engine='python')

可以正常工作,但不能在df[df.a.str.contains(r"\bitem1\b")] query()

中使用

当我尝试在这样的查询中实现它时,它不起作用:

eval()

我已经收到有关如何在不使用query()(df.query('a.str.join(" ").str.contains(r"\bitem1\b")', engine='python') # also use @mylist here )的情况下执行此操作的答案,但是对于我的系统,如果我要避免重写大部分代码,则不得不使用query | eval 。

1 个答案:

答案 0 :(得分:1)

您的正则表达式应该可以工作,只需要转义反斜杠即可:

df.query('a.str.join(" ").str.contains(r"\\bitem1\\b")', engine='python')