У меня есть это 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")
Теперь этоoutput:
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
Проблема, как вы можете видеть, заключается в том, что некоторые из моих столбцов на самом деле являются списками .На данный момент это строки, разделенные ;
, но я могу преобразовать их в списки.Однако я не уверен, как это поможет мне отфильтровать строки, которые имеют хотя бы одно значение из column b
внутри my_list
, используя только .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"])