Mam następującą listę listy:

[[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')]

A moje pytanie brzmi, jeśli jest to możliwe, filtruj listę list przez inną datę. Na przykład: jeśli wybrałem tę datę:

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

Czy istnieje sposób, aby filtrować listę list, aby podjąć te daty, które są wyższe niż wybrana data, a także ostatnia przed moją datą? Na przykład dla pierwszej listy list, które chcę utrzymać wartości:

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

I na drugą listę listy list:

[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')]   
2
Amartin 15 listopad 2018, 14:40

1 odpowiedź

Najlepsza odpowiedź

Coś takiego?

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)

To produkuje

[
    [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
Teemu 15 listopad 2018, 15:45