Утвердить целое число в списке на серии панд

У меня есть DataFrame с двумя сериями панд следующим образом:

     value accepted_values
0      1    [1, 2, 3, 4]
1      2    [5, 6, 7, 8]

Я хотел бы эффективно проверить, находится ли значение в accept_values, используя методы pandas.

Я уже знаю, что могу сделать что-то вроде следующего, но меня интересует более быстрый подход, если он есть (потребовалось около 27 секунд на 1 миллион строк DataFrame)

import pandas as pd

df = pd.DataFrame({"value":[1, 2], "accepted_values": [[1,2,3,4], [5, 6, 7, 8]]})

def check_first_in_second(values: pd.Series):
    return values[0] in values[1]

are_in_accepted_values = df[["value", "accepted_values"]].apply(
    check_first_in_second, axis=1
)

if not are_in_accepted_values.all():
    raise AssertionError("Not all value in accepted_values")

Всего 1 ответ


Я думаю, что если создать DataFrame со столбцом списка, вы можете сравнить с помощью DataFrame.eq и проверить, соответствует ли хотя бы одно значение на строку с помощью DataFrame.any :

df1 = pd.DataFrame(df["accepted_values"].tolist(), index=df.index)
are_in_accepted_values = df1.eq(df["value"]).any(axis=1).all()

Еще одна идея:

are_in_accepted_values = all(v in a for v, a in df[["value", "accepted_values"]].to_numpy())

Есть идеи?

10000