gpt4 book ai didi

python - 使用 pandas 中的查询函数返回位于两个列表交集的行

转载 作者:行者123 更新时间:2023-11-28 20:57:07 26 4
gpt4 key购买 nike

我有这个 df:

pd.DataFrame([[1, "type_1"], [2, "type_2"], [2, "type_1; type_2"], [2, "type_1; type_3"], [2, "type_3"], [2, "type_1; type_2, type_3"]],
columns=["a", "b"])
a b
0 1 type_1
1 2 type_2
2 2 type_1; type_2
3 2 type_1; type_3
4 2 type_3
5 2 type_1; type_2, type_3

我需要使用大量从配置文件中获取的查询字符串,如下所示:

my_list = ["type_1", "type_2"]
df.query("a == 2 and b in @my_list")

现在输出:

    a   b
1 2 type_2

但我希望输出是这样的,因为至少有一个来自 b 的值在 my_list 中:

    a   b
0 2 type_2
1 2 type_1; type_2
2 2 type_1; type_3
3 2 type_1; type_2, type_3

如您所见,问题是我的一些专栏实际上是列表。目前它们是由 ; 分隔的字符串,但我可以将它们转换为列表。但是,我不确定这将如何帮助我过滤 my_listcolumn b 至少有一个值的行 using only .query()(因为否则我将不得不解析查询字符串并且它变得困惑)

这将是与列表等效的代码:

pd.DataFrame([[1, ["type_1"]], [2, ["type_2"]], [2, ["type_1", "type_2"]], [2, ["type_1", "type_3"]], [2, "type_3"], [2, ["type_1", "type_2", "type_3"]]],
columns=["a", "b"])

最佳答案

其实我错了。看起来“python”引擎支持

df.query("a == 2 and b.str.contains('|'.join(@my_list))", engine='python')

a b
1 2 type_2
2 2 type_1; type_2
3 2 type_1; type_3
5 2 type_1; type_2, type_3

(旧答案)您的查询可以分为两部分:需要子字符串检查的部分,以及其他所有部分。

您可以分别计算两个掩码。我推荐使用 str.containsDataFrame.eval。然后您可以对掩码进行 AND 操作并过滤 df

m1 = df.eval("a == 2")
m2 = df['b'].str.contains('|'.join(my_list))

df[m1 & m2]

a b
1 2 type_2
2 2 type_1; type_2
3 2 type_1; type_3
5 2 type_1; type_2, type_3

关于python - 使用 pandas 中的查询函数返回位于两个列表交集的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53745443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com