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?
3 Réponses :
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.
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
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 :)
Utilisation de
df[(df.Publication-df.Date).dt.days!=1]