Pandas agrupar condicionalmente por min()
Estoy tratando de obtener el valor mínimo de una variable de fecha cuando el saldo principal es inferior al 5% del monto desembolsado. Quiero que esto se extraiga por número de cuenta, pero no quiero un nuevo df que esté agrupado por número de cuenta.
Mi df se ve así:
nro_cuenta | fecha_periodo | saldo_principal | monto_desembolsado |
---|---|---|---|
1 | 2021-01-01 | 10 | 100 |
1 | 2021-02-01 | 6 | 100 |
1 | 2021-03-01 | 3 | 100 |
1 | 2021-04-01 | 0 | 100 |
2 | 2021-01-01 | 20 | 100 |
2 | 2021-02-01 | 15 | 100 |
2 | 2021-03-01 | 11 | 100 |
2 | 2021-04-01 | 8 | 100 |
He intentado códigos similares a este para hacer que funcione, pero solo devuelve sintaxis incorrecta.
df['fecha_churn'] = df.loc[df.groupby('nro_cuenta')['saldo_principal'].apply(lambda x : x <= 0.05 * df['monto_desembolsado']), 'fecha_periodo'].min()
Quiero que el código cree un df que se vea así:
nro_cuenta | fecha_periodo | saldo_principal | monto_desembolsado | fecha_churn |
---|---|---|---|---|
1 | 2021-01-01 | 10 | 100 | 2021-03-01 |
1 | 2021-02-01 | 6 | 100 | 2021-03-01 |
1 | 2021-03-01 | 3 | 100 | 2021-03-01 |
1 | 2021-04-01 | 0 | 100 | 2021-03-01 |
2 | 2021-01-01 | 20 | 100 | nan |
2 | 2021-02-01 | 15 | 100 | nan |
2 | 2021-03-01 | 11 | 100 | nan |
2 | 2021-04-01 | 8 | 100 | nan |
davy.ai
Para obtener el valor mínimo de la variable de fecha cuando el saldo principal está por debajo del 5% del monto del desembolso, puedes utilizar la función
groupby
de pandas y aplicar una función lambda que filtre las filas basadas en la condición dada, y luego obtenga el valor mínimo de la columnaperiod_date
.Aquí está el código que debería funcionar para ti:
Esto debería darte el dataframe de salida deseado con la columna
churn_date
agregada en función de la condición dada. Ten en cuenta que para las cuentas donde no hay fechas que cumplan la condición, el valor dechurn_date
seráNaN
.