Pandas - .lo c / лямбда / временной ряд - PullRequest
0 голосов
/ 05 мая 2020

Я провел сканирование веб-страниц, которое вернуло таблицу загруженности портов. Таким образом, каждая строка представляет корабль и дни его прибытия, стоянки и отправления.

Ссылка для источника данных

Я бы хотел, чтобы мой код извлекал данные только за интервал со вчерашнего дня до 7 предыдущих дней, то есть с предыдущей недели до вчерашнего дня.

Я попытался выполнить приведенный ниже сценарий для получения данных за вчерашний день, который работает нормально. Я использую даты tabela ['отъезд'] в качестве справки:

today = date.today().strftime("%Y-%m-%d")
today = datetime.strptime(today, '%Y-%m-%d')

yesterday = pd.to_datetime(today - pd.Timedelta('1 days 00:00:00'))

df0 = tabela.loc[lambda x: pd.to_datetime(x['departure'].dt.date) == yesterday, :]

Как я могу получить весь интервал предыдущей недели?

Я пробовал следующее, но он не возвращает фрейм данных:

time = ['1 days 00:00:00', '2 days 00:00:00', '3 days 00:00:00', '4 days 00:00:00', '5 days 00:00:00', '6 days 00:00:00', '7 days 00:00:00']

week = pd.to_datetime([today - pd.Timedelta(i) for i in time])

tabela.loc[lambda x: [ x for x in list(pd.to_datetime(x['departure'].dt.date)) if x in week],:]

1 Ответ

0 голосов
/ 06 мая 2020

В .loc объедините несколько условий, используя &.

Syntax: df.loc[condition1 & condition2]

для вашего случая, вы можете попробовать следующее.

from datetime import datetime
import pandas as pd

today = datetime.today()
yest = today - pd.Timedelta('1 days 00:00:00')
lastweek = yest - pd.Timedelta('7 days 00:00:00')

tabela.loc[(tabela['departure']<=yest) & (tabela['departure']>=lastweek)]

надеюсь, это поможет.

...