df

date
2020-02-14 14:54:07
2020-02-12 17:01:31
2020-02-11 09:51:23
2020-02-11 08:51:23
2020-02-11 09:24:23
2020-02-11 00:24:27
2020-02-29 08:02:57
2020-03-13 08:44:10 

Objectif

date                     new_date
2020-02-14 14:54:07      2020-02-14
2020-02-12 17:01:31      2020-02-12
2020-02-11 09:51:23      2020-02-11
2020-02-11 08:51:23      2020-02-10
2020-02-11 09:24:23      2020-02-10
2020-02-11 00:24:27      2020-02-10
2020-02-29 08:02:57      2020-02-28
2020-03-13 08:44:10      2020-03-12

Si l'heure dans la colonne date est postérieure à '09: 25: 00 ', alors la valeur de new_date est la même que date sinon les valeurs sont le dernier jour de date .

0
Jack 16 oct. 2020 à 11:29

2 réponses

Meilleure réponse

Utilisez numpy.where avec des temps de comparaison dans des chaînes et si nécessaire supprimer un jour du minimum date:

t = '09:25:00'

m = df['date'].dt.strftime('%H:%M:%S').gt(t)
s = df['date'].dt.date
df['new_date'] = np.where(m, s, s.min() - pd.Timedelta(1, unit='days'))
#if need subtract one day
#df['new_date'] = np.where(m, s, s - pd.Timedelta(1, unit='days'))
print (df)
                 date    new_date
0 2020-02-14 14:54:07  2020-02-14
1 2020-02-12 17:01:31  2020-02-12
2 2020-02-11 09:51:23  2020-02-11
3 2020-02-11 08:51:23  2020-02-10
4 2020-02-11 09:24:23  2020-02-10
5 2020-02-11 00:24:27  2020-02-10

Solution avec les temps:

from datetime import time

m = df['date'].dt.time.gt(time(9, 25))
s = df['date'].dt.date
df['new_date'] = np.where(m, s, s.min() - pd.Timedelta(1, unit='days'))
#if need subtract one day
#df['new_date'] = np.where(m, s, s - pd.Timedelta(1, unit='days'))
print (df)
                 date    new_date
0 2020-02-14 14:54:07  2020-02-14
1 2020-02-12 17:01:31  2020-02-12
2 2020-02-11 09:51:23  2020-02-11
3 2020-02-11 08:51:23  2020-02-10
4 2020-02-11 09:24:23  2020-02-10
5 2020-02-11 00:24:27  2020-02-10
3
jezrael 16 oct. 2020 à 08:48

En supposant que vous parlez de la date précédente et non de la dernière date que vous pouvez utiliser, appliquez et vérifiez chaque date:

df["new_date"] = df.apply(lambda x: x.date.date() if x.date.time() > datetime.time(9,25) else x.date.date()-pd.DateOffset(days=-1), axis=1)
0
John Sloper 16 oct. 2020 à 08:41