Использование цикла или автоматического подхода для объединения всех возможных элементов в одном кадре данных на основе Python

Программы на Python
Ответить
Anonymous
 Использование цикла или автоматического подхода для объединения всех возможных элементов в одном кадре данных на основе

Сообщение Anonymous »

Резюме: я хочу иметь возможность воссоздать свой код SQL с помощью Python, чтобы мне не приходилось вручную вводить каждое соединение в ситуациях, когда комбинации становятся слишком большими для обработки.
У меня есть одна таблица
import pandas
data_table_one = {'store': ['A','B', 'C', 'C', 'C'],
'new_item': ['red car', 'red boat', 'red plane', 'green plane', 'red bike'],
'previous_item':['green car', 'green boat', 'green plane', 'yellow plane' , 'green bike'],
'change_date': ['2025-01','2025-01','2025-01','2024-01','2025-01']}
df_table_one = pandas.DataFrame(data_table_one)

df_table_one ниже
| store | new_item | previous_item | change_date |
|-------|-------------|---------------|-------------|
| A | red car | green car | 2025-01 |
| B | red boat | green boat | 2025-01 |
| C | red plane | green plane | 2025-01 |
| C | green plane | yellow plane | 2024-01 |
| C | red bike | green bike | 2025-01 |

Предположим, что все товары в каждом магазине уникальны, поэтому в магазине A будет только одна красная машина, а в магазине B также может быть красная машина. Я хочу иметь возможность получать последний новый_элемент на основе максимальной даты изменения и первый предыдущий_элемент на основе минимальной даты изменения, пока все элементы не будут прослежены обратно.
Желаемый результат: красная машина соединяется с зеленой машиной, красная лодка с зеленой лодкой, красный велосипед с зеленым велосипедом и красный самолет с желтой плоскостью, поскольку желтая плоскость сначала соединяется с зеленой плоскостью, а затем зеленая плоскость соединяется с красной плоскостью.
Желаемый Вывод
| store | latest_item | latest_change_date | first_item | first_change_date |
|-------|-------------|--------------------|--------------|-------------------|
| A | red car | 2025-01 | green car | 2025-01 |
| B | red boat | 2025-01 | green boat | 2025-01 |
| C | red plane | 2025-01 | yellow plane | 2024-01 |
| C | red bike | 2025-01 | green bike | 2025-01 |

В настоящее время я могу сделать это через SQL (Redshift), но проблема в том, что это быстро становится немасштабируемым, если имеется более одного соединения или если количество необходимых соединений неизвестно, поэтому код придется обновлять каждый раз вручную, т. е. в декабре 2025 года это одно соединение, а в январе 2026 года может быть два соединения.
select
a.store,
a.new_item as latest_item,
a.change_date as latest_change_date,
b.previous_item as first_item,
b.change_date as first_change_date
from
df_table_one a
join
df_table_one b
on b.new_item = a.previous_item
and b.store = a.store
;


Подробнее здесь: https://stackoverflow.com/questions/798 ... n-one-data
Ответить

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

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

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

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

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