Let it be the following Python Panda DataFrame:
JavaScript
x
10
10
1
| country_ID | date | counter | value |
2
| -------- | ------------------------- | -------- | ------ |
3
| USA | 2022-03-01 09:22:29+00:00 | 1 | red |
4
| UK | 2022-03-01 11:21:20+00:00 | 1 | blue |
5
| USA | 2022-04-02 12:15:23+00:00 | 1 | red |
6
| ITL | 2022-04-03 11:13:31+00:00 | 1 | red |
7
| USA | 2022-05-05 21:04:42+00:00 | 1 | green |
8
| USA | 2022-05-05 22:01:51+00:00 | 1 | green |
9
| ITL | 2022-06-06 13:00:41+00:00 | 1 | red |
10
Given a date and time range (start and end) and a country_ID
, I want to add 2 hours to the rows that are in that range:
Example:
JavaScript
1
2
1
add_hours('USA', '2022-03-01 09:00:00', '2022-05-05 21:30:00', 2)
2
JavaScript
1
10
10
1
| country_ID | date | counter | value |
2
| -------- | ------------------------- | -------- | ------ |
3
| USA | 2022-03-01 11:22:29+00:00 | 1 | red |
4
| UK | 2022-03-01 11:21:20+00:00 | 1 | blue |
5
| USA | 2022-04-02 14:15:23+00:00 | 1 | red |
6
| ITL | 2022-04-03 11:13:31+00:00 | 1 | red |
7
| USA | 2022-05-05 23:04:42+00:00 | 1 | green |
8
| USA | 2022-05-05 22:01:51+00:00 | 1 | green |
9
| ITL | 2022-06-06 13:00:41+00:00 | 1 | red |
10
Advertisement
Answer
Try your logic with boolean indexing (date
must also be a datetime object, not a string):
JavaScript
1
6
1
def add_hours(df, country, start, end):
2
is_country = df['country_ID'].eq(country)
3
valid_date = df['date'].between(start, end)
4
5
df.loc[is_country & valid_date, 'date'] += pd.Timedelta('2H')
6