Encontrar la intersección entre dos dataframes de forma iterativa.
Tengo los siguientes dos dataframes y me gustaría encontrar su intersección.
df1 = pd.DataFrame({"0": [1524, 8788, 9899, 27172],
"1": [1333, 4476, 78783, 90832],
"2": [2021, 2022, 34522, 38479]})
print(df1)
0 1 2
0 1524 1333 2021
1 8788 4476 2022
2 9899 78783 34522
3 27172 90832 38479
df2
es de tipo lista con una columna ‘0’ que se ve así:
0
[1123, 2021, 1333, 6636],
[1245, 2022, 4477, 0],
[1524, 2023, 1, 27172],
[2021, 2023, 90832, 38479]
La salida esperada debería ser la intersección de df1 y df2, por ejemplo:
df3 = [2021, 1333],
[2022],
[0],
[90832, 38479]
Lo que he leído hasta ahora se refiere a encontrar la intersección para una sola lista, y no para dos dataframes con diferentes tipos de datos. Mi objetivo final es calcular la precisión que es la intersección de df1 y df2 dividida por el número total de mis recomendaciones de df1, que es 3.
Nota adicional de los comentarios debajo:
Las filas están alineadas y se compararían de a pares.
[0]
en df3 no aparece en ninguna parte, pero podría funcionar en caso de que la intersección sea 0.
davy.ai
Para encontrar la intersección de
df1
ydf2
, podemos convertirdf2
en un conjunto de tuplas y realizar la intersección de conjuntos con cada fila dedf1
como una tupla. Aquí está el código para lograr eso:En el código anterior, primero convertimos
df2
en un conjunto de tuplas usando la funciónmap
y el constructortuple
. Esto es necesario porque los conjuntos solo pueden contener tipos hashables, y las listas no son hashables.A continuación, iteramos sobre todas las filas de
df1
utilizando un buclefor
. Para cada fila, la convertimos en un conjunto y realizamos la intersección de conjuntos condf2_set
. Luego convertimos el conjunto resultante nuevamente en una lista y la agregamos adf3
.El resultado final es una lista de listas que contiene la intersección de cada fila de
df1
condf2
. Tenga en cuenta que si la intersección está vacía, se agrega una lista con un único elemento (0 en este caso) adf3
.Para calcular la precisión, podemos contar el número de listas no vacías en
df3
y dividirlo por el número total de recomendaciones, que en este caso es 3. Aquí está el código:La función
sum
se utiliza para contar el número de valoresTrue
en la comprensión de lista, lo que da el número de listas no vacías. Luego dividimos por 3 para obtener la precisión.