Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

200
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!