Tengo varias listas y quiero encontrar valores comunes y contarlos. por ejemplo, suponga que tengo las siguientes listas.
l1=[1,22,63,4,5,66,7]
l2=[1,22,3,5,6,4]
l3=[1,2,3,5,66,4,70]
Rendimiento esperado:
1 es común en toda la lista, por lo que se clasifica como 3. De manera similar, 6 está solo en una lista y se clasifica como 1.
Probé el método de intersección pero solo encontró los valores comunes.
Primera y breve solución gracias a @HenryEcker:
l1=[1,22,63,4,5,66,7]
l2=[1,22,3,5,6,4]
l3=[1,2,3,5,66,4,70]
lst = l1+l2+l3
df = pd.DataFrame(lst, columns=['ID']).value_counts().reset_index(name='rank')
Segunda solución: (Primero puede concatenar tres listas con l1+l2+l3
luego con Counter
contar y crear y dict
luego convertir dict
a pandas
).
from collections import Counter
l1=[1,22,63,4,5,66,7]
l2=[1,22,3,5,6,4]
l3=[1,2,3,5,66,4,70]
lst = l1+l2+l3
df = pd.DataFrame(Counter(lst).items(), columns=['ID', 'rank'])
df = df.sort_values('rank',ascending=False)
print(df)
Producción:
Tiempo de ejecución de dos soluciones: ( %timeit
se conoce como línea mágica en iPython. (Más información mágica de la documentación aquí ))
%timeit pd.DataFrame(Counter(lst).items(), columns=['ID', 'rank']).sort_values('rank',ascending=False)
# 952 µs ± 222 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit pd.DataFrame(lst, columns=['ID']).value_counts().reset_index(name='rank')
# 2.75 ms ± 701 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras