3
votes

Filtrer un DataFrame en comparant les dates de deux colonnes différentes

J'ai un dataframe qui ressemble à:

 Publication Date       Date  Value State
       2018-12-12 2018-12-12   12.0    AL
       2018-12-12 2018-12-12   13.0    AZ
       2018-12-12 2018-12-12   14.0    AK
       2018-12-12 2018-12-12   12.0    NJ
       2018-12-12 2018-12-12   11.5    NY

Je souhaite supprimer chaque occurrence où Date de publication = Date + 1 donc lorsque Date de publication = 2018-12-12 et Date = 2018-12-11 toutes ces valeurs sont abandonné.

Cela ressemblerait à:

   Publication Date        Date  Value State
0        2018-12-12  2018-12-11    2.0    AL
1        2018-12-12  2018-12-11    1.0    AZ
2        2018-12-12  2018-12-11    1.0    AK
3        2018-12-12  2018-12-11    2.0    NJ
4        2018-12-12  2018-12-11    1.5    NY
5        2018-12-12  2018-12-12   12.0    AL
6        2018-12-12  2018-12-12   13.0    AZ
7        2018-12-12  2018-12-12   14.0    AK
8        2018-12-12  2018-12-12   12.0    NJ
9        2018-12-12  2018-12-12   11.5    NY
10       2018-12-13  2018-12-12    2.0    AL
11       2018-12-13  2018-12-12    3.0    AZ
12       2018-12-13  2018-12-12    6.0    AK
13       2018-12-13  2018-12-12    1.0    NJ
14       2018-12-13  2018-12-12    4.0    NY

Quelle est la manière la plus simple de faire cela?


0 commentaires

3 Réponses :


4
votes

Obtenez un masque, utilisez-le pour filtrer df:

m = df['Publication Date'].eq(df['Date'] + pd.Timedelta(1, unit='D'))
df[~m]

  Publication Date       Date  Value State
5       2018-12-12 2018-12-12   12.0    AL
6       2018-12-12 2018-12-12   13.0    AZ
7       2018-12-12 2018-12-12   14.0    AK
8       2018-12-12 2018-12-12   12.0    NJ
9       2018-12-12 2018-12-12   11.5    NY

Si "Date de publication" et "Date" ne sont pas des colonnes date / heure, utilisez pd.to_datetime (..., errors = 'coerce') pour les contraindre d'abord.


0 commentaires

0
votes

Pour cela, veuillez importer timedelta

df = df[df["Publication Date"] != df.date + timedelta(days=1)];

Commencez par convertir le type de données de la colonne date en datetime.

df.Date = pd.to_datetime(df.Date)
df["Publication Date"] = pd.to_datetime(df["Publication Date"])

Filtrez ensuite le dataframe p >

from datetime import timedelta


1 commentaires

Pandas a pd.datetime et pd.TimeDelta. Exemple pd.datetime.now (), ou pd.Timedelta ('4 jours 1 h 32 s'). Il semble que datetime est hérité :) donc vous n'avez pas besoin de l'importer :)



1
votes

Utilisation de

df[(df.Publication-df.Date).dt.days!=1]


0 commentaires