es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python: Cómo calcular los ingresos generados por mes entre años?

Las columnas en el conjunto de datos a continuación tendrán:

A: Fecha de apertura del contrato;
B: Fecha de finalización del contrato;
C: Identificación de cuenta única asociada al contrato (puede haber varios contratos activos asociados a una misma identificación de cuenta);
D: Ingresos mensuales durante el período del contrato – para simplificar, suponga que los ingresos generados desde el primer mes del contrato se asumen hasta un mes antes de la fecha de cierre del contrato.

Código resultante:

Opp Start Date  OPP contract end date   Unique Account Field    MRR(expected)
1/2/2013         1/2/2015                 50e55                 195.00
1/2/2013         1/2/2014                 4ee75                 50.00
1/2/2013         1/2/2014                 4f031                 75.00
1/2/2013         1/2/2016                 4c3b2                 133.00
1/2/2013         1/2/2016                 49ec8                 132.00
1/3/2013         1/3/2014                 49fc8                 59.00
1/4/2013         1/4/2015                 49wc8                 87.00
12/27/2013       12/27/2014               50bf7                 190.00
12/27/2013       12/27/2014               49cc8                 179.00
12/27/2013       12/27/2014               49ec8                 147.00

Me gustaría calcular lo siguiente:
1) ¿Cuántos ingresos se generaron por mes entre enero de 2013 y diciembre de 2014?
2) ¿Cuántos contratos activos (que generaron ingresos en ese mes) había por mes entre enero de 2013 y diciembre de 2014?
3) ¿Cuántas cuentas activas (que generaron ingresos de al menos un contrato) había por mes entre enero de 2013 y diciembre de 2014?

Intenté el siguiente código:
Pude usar sum() para obtener los ingresos, pero no estoy seguro de qué hacer más allá de esto.

from datetime import date
df['date'] = pd.to_datetime(df['Opp Start Date'])
df.groupby(df['Opp Start Date'].dt.strftime('%B'))['MRR(expected)'].sum().sort_values()

Resultado obtenido del código anterior:

Opp Start Date
February     221744
January      241268
July         245811
August       247413
April        249702
March        251219
June         251494
May          259149
September    263395
October      293990
November     296590
December     311659

Necesito calcular lo siguiente.
¿Cómo puedo lograr esto en Python?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para calcular las respuestas a las preguntas, puedes utilizar la función groupby() de pandas junto con algunas funciones adicionales de filtrado y agregación.

    1) Para calcular los ingresos generados por mes, puedes agrupar los datos por mes y luego sumar los ingresos mensuales. El código se vería así:

    df['mes'] = pd.to_datetime(df['Fecha de inicio de la oportunidad']).dt.strftime('%Y-%m')
    ingresos_mensuales = df.groupby('mes')['MRR(esperado)'].sum()
    

    Esto te dará un objeto Series de pandas con los ingresos totales generados para cada mes.

    2) Para calcular el número de contratos activos en cada mes, puedes agrupar los datos por mes y luego contar el número de IDs de contratos únicos. Deberás filtrar los datos para incluir solo los contratos que estuvieron activos durante cada mes. El código se vería así:

    contratos_activos = df[df['Fecha de inicio de la oportunidad'] <= pd.to_datetime(df['mes']).values].groupby('mes')['Campo de cuenta único'].nunique()
    

    Esto te dará un objeto Series de pandas con el número de contratos activos para cada mes.

    3) Para calcular el número de cuentas activas en cada mes, puedes agrupar los datos por mes y luego contar el número de IDs de cuenta únicos. Deberás filtrar los datos para incluir solo las cuentas que generaron ingresos durante cada mes. El código se vería así:

    cuentas_activas = df[df['Fecha de inicio de la oportunidad'] <= pd.to_datetime(df['mes']).values].groupby('mes')['Campo de cuenta único'].unique().apply(len)
    

    Esto te dará un objeto Series de pandas con el número de cuentas activas para cada mes.

    Puedes combinar todos estos cálculos en un solo bloque de código:

    import pandas as pd
    
    # leer los datos
    df = pd.read_csv('dataset.csv')
    
    # calcular ingresos mensuales
    df['mes'] = pd.to_datetime(df['Fecha de inicio de la oportunidad']).dt.strftime('%Y-%m')
    ingresos_mensuales = df.groupby('mes')['MRR(esperado)'].sum()
    
    # calcular número de contratos activos
    contratos_activos = df[df['Fecha de inicio de la oportunidad'] <= pd.to_datetime(df['mes']).values].groupby('mes')['Campo de cuenta único'].nunique()
    
    # calcular número de cuentas activas
    cuentas_activas = df[df['Fecha de inicio de la oportunidad'] <= pd.to_datetime(df['mes']).values].groupby('mes')['Campo de cuenta único'].unique().apply(len)
    
    # combinar los resultados en un solo dataframe
    resultado_df = pd.DataFrame({
        'Ingresos Mensuales': ingresos_mensuales,
        'Contratos Activos': contratos_activos,
        'Cuentas Activas': cuentas_activas
    })
    

    Esto te dará un dataframe con los resultados para las tres preguntas.

Comments are closed.