2 votes

Ajouter l'heure à la date/heure dans pandas en utilisant des conditions

J'ai un cadre de données avec une colonne Date/Heure.

0    2020-01-07 09:00:00
1    2020-01-15 13:00:00
2    2020-01-22 14:00:00
3    2020-01-30 09:00:00
4    2020-02-05 14:00:00
5    2020-02-12 10:00:00
6    2020-05-12 07:00:00
7    2020-05-12 08:00:00
8    2020-05-12 09:00:00
9    2020-05-12 10:00:00
10   2020-05-12 11:00:00
11   2020-05-12 12:00:00
12   2020-05-12 13:00:00
13   2020-05-12 14:00:00
14   2020-05-12 15:00:00
15   2020-05-12 16:00:00
16   2020-07-02 08:00:00
17   2020-07-02 09:00:00
18   2020-07-02 10:00:00
19   2020-07-02 11:00:00
20   2020-07-02 12:00:00

Ce que j'essaie de faire, c'est d'ajouter 2 heures à l'heure lorsque la date est comprise entre 3/14/2020 et 11/07/2020, et d'ajouter 1 heure à l'heure partout ailleurs. J'ai pu ajouter l'heure en utilisant ce qui suit :

df['Date/Time'] = df['Date/Time'] + pd.DateOffset(hours=1)

Cependant, je n'arrive pas à trouver comment le faire via df.loc. ce que j'ai essayé :

df.loc[(df['Date/Time'] >= start_date) & (df['Date/Time'] <= end_date), ['Date/Time']] = (['Date/Time'] + pd.DateOffset(hours=1))

J'ai également essayé d'itérer sur la base de données à l'aide des instructions For et IF imbriquées, mais j'ai obtenu l'erreur suivante.

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Toute aide serait appréciée. Je vous remercie de votre attention et vous prie d'agréer, Madame, Monsieur, mes salutations distinguées.

2voto

Quang Hoang Points 191

Essayons :

start_time, end_time = '3/14/2020', '11/07/2020'

df['Date/Time'] += np.where(df['Date/Time'].between(start_time, end_time),
         pd.Timedelta('2H'),
         pd.Timedelta('1H')
        )

start_time, end_time = 314, 1107

month_day = df['Date/Time'].dt.month * 100 + df['Date/Time'].dt.day
df['Date/Time'] += np.where(month_day.between(start_time, end_time),
     pd.Timedelta('2H'),
     pd.Timedelta('1H')
    )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X