Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
pandas: muestra N recuentos más altos en un marco de datos agrupado

Aquí está mi marco de datos de entrada

 df = pd.DataFrame([ ['CA', 'LAX', 'Alice'], ['NY', 'NYC', 'Alice'], ['TX', 'HOU', 'Alice'], ['CA', 'SFO', 'Bob'], ['NY', 'NYC', 'Bob'], ['TX', 'AUS', 'Bob'], ['CA', 'LAX', 'Carol'], ['NY', 'ALB', 'Carol'], ['TX', 'HOU', 'Carol'], ['CA', 'LAX', 'Dan'], ['NY', 'NYC', 'Dan'], ['TX', 'DAL', 'Dan'], ['CA', 'SFO', 'Eve'], ['NY', 'NYC', 'Eve'], ['TX', 'AUS', 'Eve'], ['CA', 'SDO', 'Frank'], ['NY', 'NYC', 'Frank'], ['TX', 'HOU', 'Frank']], columns=['State','City','Person'])

Y aquí está la salida que deseo obtener:

 State City Count CA LAX 3 SFO 2 NY ALB 1 NYC 5 TX HOU 3 AUS 2

Básicamente, quiero mostrar las 2 ciudades principales que tienen el mayor número de personas, para cada estado.

He intentado usar esta instrucción groupby: df.groupby(['State','City'])['Person'].count()

que genera debajo de la salida

 State City CA LAX 3 SDO 1 SFO 2 NY ALB 1 NYC 5 TX AUS 2 DAL 1 HOU 3

Pero no puedo encontrar declaraciones que puedan ordenar los recuentos anteriores y elegir los dos recuentos más altos. Realmente apreciaría la ayuda!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Creo que puedes simplificar el enfoque.

Puede usar groupby.value_counts() , en lugar de count() , para llegar a donde está y luego encadenar otro groupby().head(2) para obtener las 2 ciudades principales de cada estado.

La razón es que el objeto resultante de value_counts() estará en orden descending , de modo que el primer elemento es el elemento que ocurre con más frecuencia, por lo que puede usar head(2) tal como está.

 df.groupby('State')['City'].value_counts().groupby('State').head(2) State City CA LAX 3 SFO 2 NY NYC 5 ALB 1 TX HOU 3 AUS 2 Name: City, dtype: int64
over 4 years ago · Santiago Trujillo Denunciar

0

Su primer grupo fue correcto, después de eso desea ordenar sus valores según el estado y el recuento.

Luego, vuelve a agrupar únicamente en el estado y busca la cabeza (2). Si lo desea, puede (re)establecer su índice en Estado y ciudad.

 df2 = df.groupby(['State','City'])['Person'].count().to_frame('Count') df2 = df2.reset_index().sort_values(['State', 'Count'], ascending=[True, False]) df2.groupby('State').head(2).set_index(['State','City'])

Producción:

 Count State City CA LAX 3 SFO 2 NY NYC 5 ALB 1 TX HOU 3 AUS 2
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda