Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

132
Visualizações
Cree una nueva columna que cuente hacia atrás desde un punto específico

Me gustaría ver un resultado en el tiempo anterior a un cambio de producto y después de un cambio de producto. Aquí hay un ejemplo de DF:

 import pandas as pd ids = [1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2] date = ["11/4/2020", "12/5/2020", "01/5/2021", "02/5/2020", "03/5/2020", "04/5/2020", "05/5/2020", "06/5/2020", "07/5/2020", "08/5/2020", "09/5/2020", "01/3/2019", "02/3/2019", "03/3/2019", "04/3/2019", "05/3/2019", "06/3/2019", "07/3/2019", "08/3/2019", "09/3/2019", "10/3/2019"] months = [0,1,2,3,4,0,1,2,3,4,5,0,1,2,3,4,0,1,2,3,4] df = pd.DataFrame({'ids': ids, 'date': date, 'months': months }) df ids date months 0 1 11/4/2020 0 1 1 12/5/2020 1 2 1 01/5/2021 2 3 1 02/5/2020 3 4 1 03/5/2020 4 5 1 04/5/2020 0 6 1 05/5/2020 1 7 1 06/5/2020 2 8 1 07/5/2020 3 9 1 08/5/2020 4 10 1 09/5/2020 5 11 2 01/3/2019 0 12 2 02/3/2019 1 13 2 03/3/2019 2 14 2 04/3/2019 3 15 2 05/3/2019 4 16 2 06/3/2019 0 17 2 07/3/2019 1 18 2 08/3/2019 2 19 2 09/3/2019 3 20 2 10/3/2019 4

Esto es lo que me gustaría que fuera el resultado final:

 ids date months new_col 0 1 11/4/2020 0 -5 1 1 12/5/2020 1 -4 2 1 01/5/2021 2 -3 3 1 02/5/2020 3 -2 4 1 03/5/2020 4 -1 5 1 04/5/2020 0 0 6 1 05/5/2020 1 1 7 1 06/5/2020 2 2 8 1 07/5/2020 3 3 9 1 08/5/2020 4 4 10 1 09/5/2020 5 5 11 2 01/3/2019 0 -5 12 2 02/3/2019 1 -4 13 2 03/3/2019 2 -3 14 2 04/3/2019 3 -2 15 2 05/3/2019 4 -1 16 2 06/3/2019 0 0 17 2 07/3/2019 1 1 18 2 08/3/2019 2 2 19 2 09/3/2019 3 3 20 2 10/3/2019 4 4

En otras palabras, me gustaría agregar una columna que encuentre la segunda instancia de meses = 0 para una identificación específica y cuente hacia atrás a partir de eso para poder ver los resultados antes de ese punto (todos los números negativos) frente a los resultados después de ese punto ( todos los números positivos).

¿Hay una manera simple de hacer esto en pandas?

Gracias por adelantado

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Suponga que hay 2 y solo 2 instancias de 0 por grupo, por lo que no me importan los ids porque:

  • (id1, primer 0) -> contador negativo,
  • (id1, segundo 0) -> contador positivo,
  • (id2, primer 0) -> contador negativo,
  • (id2, segundo 0) -> recuento positivo y así sucesivamente.

Crea grupos virtuales para saber si tienes que crear contador negativo o positivo:

  • grupo impar: contador negativo
  • grupo par: contador positivo
 df['new_col'] = ( df.assign(new_col=df['months'].eq(0).cumsum()) .groupby('new_col')['new_col'] .apply(lambda x: range(-len(x), 0, 1) if x.name % 2 else range(len(x))) .explode().values )

Producción:

 >>> df ids date months new_col 0 1 11/4/2020 0 -5 1 1 12/5/2020 1 -4 2 1 01/5/2021 2 -3 3 1 02/5/2020 3 -2 4 1 03/5/2020 4 -1 5 1 04/5/2020 0 0 6 1 05/5/2020 1 1 7 1 06/5/2020 2 2 8 1 07/5/2020 3 3 9 1 08/5/2020 4 4 10 1 09/5/2020 5 5 11 2 01/3/2019 0 -5 12 2 02/3/2019 1 -4 13 2 03/3/2019 2 -3 14 2 04/3/2019 3 -2 15 2 05/3/2019 4 -1 16 2 06/3/2019 0 0 17 2 07/3/2019 1 1 18 2 08/3/2019 2 2 19 2 09/3/2019 3 3 20 2 10/3/2019 4 4
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda