фильтрация списка списков дат в python - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть следующий список списка:

[[Timestamp('2018-04-07 00:00:00'), Timestamp('2018-07-07 00:00:00'),Timestamp('2020-04-07 00:00:00')], [Timestamp('2018-04-07 00:00:00'),Timestamp('2018-10-07 00:00:00'),Timestamp('2018-12-07 00:00:00'),Timestamp('2021-04-07 00:00:00'),Timestamp('2022-04-07 00:00:00'),Timestamp('2023-04-07 00:00:00')]

И у меня вопрос, возможно ли отфильтровать список списков по другой дате. Например: Если я выберу эту дату:

datetime.datetime(2019, 1, 26, 0, 0)

Есть ли способ отфильтровать список списков так, чтобы они брали только те даты, которые превышают выбранную мной дату, а также последнюю дату перед моей датой? Например, для первого списка списков я хочу сохранить значения:

[Timestamp('2018-07-07 00:00:00'),Timestamp('2020-04-07 00:00:00')]

А для второго списка из списка списков:

[Timestamp('2018-12-07 00:00:00'),Timestamp('2021-04-07 00:00:00'),Timestamp('2022-04-07 00:00:00'),Timestamp('2023-04-07 00:00:00')]   

1 Ответ

0 голосов
/ 15 ноября 2018

Как то так?

import datetime
from pandas import Timestamp


# List of Timestamps
list_of_dates = [[Timestamp('2018-04-07 00:00:00'), Timestamp('2018-07-07 00:00:00'), Timestamp('2020-04-07 00:00:00')], [Timestamp('2018-04-07 00:00:00'), Timestamp('2018-10-07 00:00:00'), Timestamp('2018-12-07 00:00:00'), Timestamp('2021-04-07 00:00:00'), Timestamp('2022-04-07 00:00:00'), Timestamp('2023-04-07 00:00:00')]]

# Target date that we use as filter
target_date = datetime.datetime(2019, 1, 26, 0, 0)

def filter_dates(date_list, target_date):
  """Filter given timestamps according to target date.

  Keep last date before target date and all future dates after target date."""

  # Initialise return list
  filtered_dates = []

  # Iterate over list of lists
  for dates in date_list:

    # Use list comprehension to filter dates that are on either sides of the target date
    dates_before_target_date = [date for date in dates if date < target_date]
    dates_after_target_date = [date for date in dates if date > target_date]

    # Keep last date before the target date and all future dates
    filtered_dates.append([dates_before_target_date[-1]] + dates_after_target_date)

  return filtered_dates

filtered_dates = filter_dates(list_of_dates, target_date)
print(filtered_dates)

Это производит

[
    [Timestamp('2018-07-07 00:00:00'), Timestamp('2020-04-07 00:00:00')],
    [Timestamp('2018-12-07 00:00:00'), Timestamp('2021-04-07 00:00:00'), Timestamp('2022-04-07 00:00:00'), Timestamp('2023-04-07 00:00:00')]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...