1

I have a dataframe (in datetime) filled with Tidal predictions for a tidalstation for the year of 2021

1: I would like query based on the current date {tday} 2: Aswel as filter in a range of dates; 2 days before {tday} 2 after after

How should i proceed?

code and df query atempt

FObersteiner
  • 22,500
  • 8
  • 42
  • 72
mR.bLuEsKy
  • 13
  • 1
  • 3

1 Answers1

0

How about something like this? Also, going forward, it will benefit you greatly to learn how to provide a properly formatted reproducible example.

from faker import Faker
from itertools import cycle
import pandas as pd
import random
fake = Faker()

#Create fake sample data

tides = cycle(['LW', 'HW'])


def create_rows_faker(num=1):
    output = [{
        "date_time":fake.date_time_between('-5d', 'now'),
        "tide":next(tides),
        "cm_NAP":random.randint(1000,2000)} for x in range(num)]
    return output


df_faker = pd.DataFrame(create_rows_faker(20))

print(df_faker.sort_values(by='date_time'))

             date_time   tide  cm_NAP
16 2021-03-02 16:47:11   LW    1146
14 2021-03-02 22:07:55   LW    1766
1  2021-03-03 00:08:37   HW    1242
7  2021-03-03 03:47:00   HW    1938
10 2021-03-03 20:24:51   LW    1910
8  2021-03-04 19:31:21   LW    1479
3  2021-03-04 19:53:18   HW    1079
13 2021-03-04 20:53:41   HW    1589
0  2021-03-05 22:14:16   LW    1093
15 2021-03-05 23:27:34   HW    1786
19 2021-03-06 00:08:59   HW    1034
17 2021-03-06 02:28:37   HW    1698
5  2021-03-06 04:39:14   HW    1922
4  2021-03-06 07:06:48   LW    1323
18 2021-03-06 07:48:38   LW    1445
9  2021-03-06 10:21:43   HW    1142
6  2021-03-07 02:01:23   LW    1209
11 2021-03-07 02:04:30   HW    1124
12 2021-03-07 06:35:49   LW    1538
2  2021-03-07 06:56:26   LW    1552


# Filter for today's date

print(df_faker[(df_faker['date_time'] > '2021-03-07 00:00:00')])

             date_time   tide  cm_NAP
2  2021-03-07 06:56:26   LW    1552
6  2021-03-07 02:01:23   LW    1209
11 2021-03-07 02:04:30   HW    1124
12 2021-03-07 06:35:49   LW    1538
# filter for 2 days before and 2 days after some arbitrary date range

print(df_faker[(df_faker['date_time'] > '2021-03-05 00:00:00') & (df_faker['date_time'] < '2021-03-07 08:00:00')])

             date_time   tide  cm_NAP
0  2021-03-05 22:14:16   LW    1093
2  2021-03-07 06:56:26   LW    1552
4  2021-03-06 07:06:48   LW    1323
5  2021-03-06 04:39:14   HW    1922
6  2021-03-07 02:01:23   LW    1209
9  2021-03-06 10:21:43   HW    1142
11 2021-03-07 02:04:30   HW    1124
12 2021-03-07 06:35:49   LW    1538
15 2021-03-05 23:27:34   HW    1786
17 2021-03-06 02:28:37   HW    1698
18 2021-03-06 07:48:38   LW    1445
19 2021-03-06 00:08:59   HW    1034
Eric
  • 2,699
  • 5
  • 17