Фильтрация строк в фрейме данных на основе условия предыдущей строкиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Фильтрация строк в фрейме данных на основе условия предыдущей строки

Сообщение Anonymous »

Код: Выделить всё

import pandas as pd

data = {
'ITEM': [1]*22,
'WAREHOUSE': [1000]*22,
'DAILY_DATE': ['9/20/2024', '9/20/2024', '9/21/2024', '9/21/2024', '9/22/2024',
'9/22/2024', '9/23/2024', '9/23/2024', '9/24/2024', '9/24/2024',
'9/25/2024', '9/25/2024', '9/26/2024', '9/26/2024', '9/27/2024',
'9/27/2024', '9/28/2024', '9/28/2024', '9/29/2024', '9/29/2024', '9/30/2024',
'9/30/2024'],
'LOAD_ARRIVAL_DATE': ['9/26/2024', '9/26/2024', '', '', '', '', '9/29/2024', '9/29/2024',
'9/30/2024', '9/30/2024', '', '', '', '', '', '', '', '', '', '', '', ''],
'FCST_CREATE_DATE': ['9/14/2024', '9/7/2024', '9/14/2024', '9/7/2024', '9/21/2024',
'9/14/2024', '9/21/2024', '9/14/2024', '9/21/2024', '9/14/2024',
'9/21/2024', '9/14/2024', '9/21/2024', '9/14/2024', '9/21/2024',
'9/14/2024', '9/21/2024', '9/14/2024', '9/21/2024','9/28/2024', '9/28/2024',
'9/21/2024'],
'FCST_QTY': [17.06, 10.4624, 12.1876, 16.2801, 8.8821, 8.3799, 11.1043, 10.7751,
8.8821, 5.9846, 5.5555, 8.3799, 11.1043, 16.7597, 11.1043, 9.5809,
11.1043, 8.3799, 130.02, 157.2252, 48.6241, 235.9502]
}

df = pd.DataFrame(data)

У меня есть фрейм данных df, который предоставляет данные ежедневного прогноза для товара на складе. Каждой дате назначаются две величины прогноза: одна представляет прогноз, сделанный за 1 неделю, а другая за 2 недели, и это соответствует FCST_CREATE_DT. LOAD_ARRIVAL_DATE описывает, был ли в этот день размещен заказ на будущую отгрузку.
Мне немного сложно описать это устно, но по сути я хочу отфильтровать свой фрейм данных, чтобы сохранить только самую большую часть данных. недавний прогноз времени размещения заказа. По сути, возвращаюсь в прошлое и использую только те прогнозы, которые были доступны на тот момент.
Визуально таблица выглядит так:



ITEM
< th>СКЛАД
DAILY_DATE
LOAD_ARRIVAL_DATE
FCST_CREATE_DATE
FCST_QTY




1
1000
20 сентября 2024 г.
26 сентября 2024 г.
9/ 14/2024
17.06


1
1000
20 сентября 2024 г.
26 сентября 2024 г.
7 сентября /2024
10,4624


1
< td>1000
21 сентября 2024 г.

14 сентября 2024 г.
12.1876


1
1000
21 сентября 2024 г.

7 сентября 2024 г.
16,2801


1
1000
< td>22.09.2024

21.09.2024
8,8821


1
1000
22 сентября/ 2024

14.09.2024
8,3799


1
1000
23 сентября 2024 г.29.09.2024
21.09.2024
11.1043


1
1000
23 сентября 2024 г.
29.09.2024
14.09.2024
10,7751


1
1000
24.09.2024
30.09.2024
21.09.2024
8,8821

1
1000
24 сентября 2024 г.
30 сентября 2024 г.
14 сентября 2024 г.
5,9846


1
1000
25 сентября 2024 г.
< td>
21.09.2024
5,5555

1
1000
25 сентября 2024 г.

14.09.2024
8,3799


1
1000
26 сентября 2024 г.

21.09.2024
11.1043


1< ш />1000
26 сентября 2024 г.

14 сентября 2024 г.
16,7597


1
1000
27 сентября 2024 г.

21 сентября 2024 г.
11.1043


1
100027.09.2024

14.09.2024
9.5809


1
1000
28.09.2024

21.09.2024
11.1043


1
1000
28 сентября 2024 г.< /td>

14.09.2024
8,3799










1
1000
29 сентября 2024 г.

21 сентября/ 2024
130.02










1
1000
29.09.2024< /td>

28.09.2024
157,2252


1
1000
30 сентября 2024 г.

28.09.2024
48,6241


1
1000
30 сентября 2024 г.

21.09.2024
235,9502



После удаления ненужных строк я хочу, чтобы это выглядело так:
< table class="s-table">


ПУНКТ
СКЛАД
DAILY_DATE
LOAD_ARRIVAL_DATE
FCST_CREATE_DATE
FCST_QTY
< /tr>



1
100020 сентября 2024 г.
26 сентября 2024 г.
14 сентября 2024 г.
17.06


1
1000
20 сентября 2024 г.
26 сентября 2024 г.
7 сентября 2024 г.
10,4624


1
1000
21.09.2024

14.09.2024
12.1876


1
1000
9/ 21.2024

7.09.2024
16.2801


1
1000
22 сентября 2024 г.

21.09.2024
8,8821


1
1000
22 сентября 2024 г.
< td>
14.09.2024
8,3799

1
1000
23 сентября 2024 г.
29 сентября/ 2024
21 сентября 2024
11.1043


1
1000
23 сентября 2024 г.
29 сентября 2024 г.
14.09.2024
10,7751


1
1000
24.09.2024
30.09.2024< /td>
21 сентября 2024 г.
8,8821


1
1000
24.09.2024
30.09.2024
14.09.2024
5,9846


< td>1
1000
25 сентября 2024 г.

21.09.2024
5,5555


1
1000
25 сентября 2024 г.

14 сентября /2024
8,3799


1
< td>1000
26 сентября 2024 г.

14 сентября 2024 г.
16,7597


1
1000
27.09.2024

14.09.2024
9.5809


1
1000
< td>28.09.2024

14.09.2024
8,3799


1
1000
29/9/ 2024

21.09.2024
130.02


11
1000
30 сентября 2024 г.
21.09.2024
235,9502



Любые строки, в которых DAILY_DATE находится перед первым экземпляром LOAD_ARRIVAL_DT, можно игнорировать. В этом случае, поскольку первый экземпляр LOAD_ARRIVAL_DT приходится на 26 сентября 2024 г., все строки, в которых значение DAILY_DATE меньше указанного, игнорируются. От диапазона дат первого экземпляра LOAD_ARRIVAL_DT до следующего экземпляра LOAD_ARRIVAL_DT я хочу учитывать только самый последний прогноз, который был доступен задним числом. Таким образом, диапазон дат будет 26.09.24 - 29.09.24. (Не включая конечный диапазон). Поскольку заказ был сделан 20.09.24, следует учитывать только прогнозы, созданные до этой даты, и мне нужен самый последний из этого подмножества.
Затем я хочу продолжать это для каждого последующего заказа. Заказ был доставлен 29.09.24, создан 23.09.24, так что я перепробовал, кажется, все, но не могу заставить это работать. Любая помощь приветствуется. фактический день 29.09.24, я хочу рассматривать только самый последний прогноз менее 23.09.24. В данном случае 21.09.24.
Это должно продолжаться бесконечно, после последнего заказа.
Я пробовал все, что угодно, но Я не могу заставить это работать должным образом.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -condition
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»