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

291
Views
Interpolación de pandas agregando filas por grupo con diferentes rangos para cada grupo

Estoy tratando de agregar filas a un DataFrame interpolando valores en una columna por grupo, y completar con las demás columnas que faltan. Mis datos se ven algo como esto:

 import pandas as pd import random random.seed(42) data = {'group':['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c' ], 'value' : [1, 2, 5, 3, 4, 5, 7, 4, 7, 9], 'other': random.sample(range(1, 100), 10)} df = pd.DataFrame(data)
 print(df) group value other 0 a 1 82 1 a 2 15 2 a 5 4 3 b 3 95 4 b 4 36 5 b 5 32 6 b 7 29 7 c 4 18 8 c 7 14 9 c 9 87

Lo que estoy tratando de lograr es algo como esto:

 group value other a 1 82 a 2 15 a 3 NaN a 4 NaN a 5 NaN b 3 95 b 4 36 b 5 32 b 6 NaN b 7 29 c 4 18 c 5 NaN c 6 NaN c 7 14 c 8 NaN c 9 87

Por ejemplo, el grupo a tiene un rango de 1 a 5, b de 3 a 7 y c de 4 a 9.

El problema que tengo es que cada grupo tiene un rango diferente. Encontré algo que funciona asumiendo un solo rango para todos los grupos. Esto podría funcionar usando el mínimo y máximo global y eliminando filas adicionales en cada grupo, pero dado que mis datos son bastante grandes, agregar muchas filas por grupo rápidamente se vuelve inviable.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

>>> df.groupby('group').apply(lambda x: x.set_index('value').reindex(np.arange(x['value'].min(), x['value'].max() + 1))).drop(columns='group').reset_index() group value other 0 a 1 82.0 1 a 2 15.0 2 a 3 NaN 3 a 4 NaN 4 a 5 4.0 5 b 3 95.0 6 b 4 36.0 7 b 5 32.0 8 b 6 NaN 9 b 7 29.0 10 c 4 18.0 11 c 5 NaN 12 c 6 NaN 13 c 7 14.0 14 c 8 NaN 15 c 9 87.0

Agrupamos en la columna del group y luego volvemos a indexar cada grupo con el rango desde el mínimo hasta el máximo de la columna de value

over 4 years ago · Santiago Trujillo Report

0

Una opción es con la función completa de pyjanitor , que puede ser útil para exponer filas que faltan explícitamente (y también puede ser útil para abstraer el proceso de remodelación):

 # pip install pyjanitor import pandas as pd import janitor new_value = {'value' : lambda df: range(df.min(), df.max()+1)} # expose the missing values per group via the `by` parameter df.complete(new_value, by='group', sort = True) group value other 0 a 1 82.0 1 a 2 15.0 2 a 3 NaN 3 a 4 NaN 4 a 5 4.0 5 b 3 95.0 6 b 4 36.0 7 b 5 32.0 8 b 6 NaN 9 b 7 29.0 10 c 4 18.0 11 c 5 NaN 12 c 6 NaN 13 c 7 14.0 14 c 8 NaN 15 c 9 87.0
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!