En python, comment obtenir la date minimale dans un groupe conditionnellement à une autre valeur.

Par exemple. Donc, ci-dessous, je veux la date minimale par identifiant, où valeur == 1 ou s'il n'y a pas de valeurs égales à 1 (valeur == 1) alors la date minimale où valeur == 0.

|----|--------------|-------------|
| id |   date       | value       |
|----|--------------|-------------|
|  1 |   2020-01-01 |    1        |
|  1 |   2020-01-04 |    1        |
|  1 |   2020-01-05 |    1        |
|  2 |   2020-01-01 |    1        |
|  3 |   2020-01-01 |    0        |
|  3 |   2020-01-05 |    1        |
|  4 |   2020-01-05 |    0        |
|----|--------------|-------------|

Attendre:

|----|--------------|-------------|
| id |   date       | value       |
|----|--------------|-------------|
|  1 |   2020-01-01 |    1        |
|  2 |   2020-01-01 |    1        |
|  3 |   2020-01-05 |    1        |
|  4 |   2020-01-05 |    0        |
|----|--------------|-------------|
1
e7reb 8 oct. 2020 à 09:54

1 réponse

Meilleure réponse

Utilisez DataFrame.sort_values par les 3 colonnes, puis supprimez les doublons par la colonne id avec DataFrame.drop_duplicates :

df['date'] = pd.to_datetime(df['date'])

df = (df.sort_values(['id','value','date'], ascending=[True, False, True])
        .drop_duplicates(['id']))
print (df)
   id       date  value
0   1 2020-01-01      1
3   2 2020-01-01      1
5   3 2020-01-05      1
6   4 2020-01-05      0
1
jezrael 8 oct. 2020 à 07:02