Как найти предпоследнюю дату в списке на основе значений в другом столбце?

Как получить предпоследнюю дату посещения места X из столбца "B", если в столбце "A" есть ячейки со списком мест, включающим место X, которые повторяются?
  • 22 февраля 2024 г. 12:08
Ответы на вопрос 2
Для того, чтобы найти предпоследнюю дату посещения места X из столбца "B", сначала необходимо отфильтровать строки, содержащие место X в столбце "A". Затем можно отсортировать эти строки по дате в столбце "B" и выбрать вторую по счету дату.

Примерный алгоритм:

1. Отфильтровать строки, содержащие место X в столбце "A".
2. Отсортировать отфильтрованные строки по дате в столбце "B" в убывающем порядке.
3. Выбрать вторую по счету дату из отсортированных строк.

Пример кода на Python с использованием библиотеки Pandas:

```python
import pandas as pd

# Создание DataFrame
data = {'A': ['место1, место2', 'место1, место3', 'место2, место1', 'место3', 'место3, место1'],
        'B': ['2022-01-01', '2022-01-05', '2022-01-03', '2022-01-02', '2022-01-04']}
df = pd.DataFrame(data)

# Место X
place_X = 'место1'

# Отфильтровать строки, содержащие место X
filtered_rows = df[df['A'].str.contains(place_X)]

# Отсортировать отфильтрованные строки по дате в столбце "B"
sorted_rows = filtered_rows.sort_values(by='B', ascending=False)

# Получить предпоследнюю дату
if len(sorted_rows) > 1:
    predpred_last_date = sorted_rows.iloc[1]['B']
    print(predpred_last_date)
else:
    print('Недостаточно данных')
``` 

В этом примере кода, строки данных фильтруются, после чего сортируются в порядке убывания даты посещения места X. После этого выбирается вторая по счету дата из отсортированных строк.
Мне кажется, что эту задачу можно решить через SORTN, но вот что первое приходит в голову 

=LET(
  places;UNIQUE(A2:A);
  dates;BYROW(places;LAMBDA(_p;TO_DATE(INDEX(SORT(FILTER(B2:B;A2:A=_p);1;0);2))));
  {places\dates}
)


Похожие вопросы