Резюме: я хочу иметь возможность воссоздать свой код 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
Использование цикла или автоматического подхода для объединения всех возможных элементов в одном кадре данных на основе ⇐ Python
Программы на Python
1764825470
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)
[b]df_table_one ниже[/b]
| 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 |
[b]Предположим, что все товары в каждом магазине уникальны, поэтому в магазине A будет только одна красная машина, а в магазине B также может быть красная машина[/b]. Я хочу иметь возможность получать последний новый_элемент на основе максимальной даты изменения и первый предыдущий_элемент на основе минимальной даты изменения, пока все элементы не будут прослежены обратно.
Желаемый результат: красная машина соединяется с зеленой машиной, красная лодка с зеленой лодкой, красный велосипед с зеленым велосипедом и [b]красный самолет с желтой плоскостью, поскольку желтая плоскость сначала соединяется с зеленой плоскостью, а затем зеленая плоскость соединяется с красной плоскостью.[/b]
[b]Желаемый Вывод[/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
;
Подробнее здесь: [url]https://stackoverflow.com/questions/79837276/utilizing-a-loop-or-automated-approach-to-join-all-possible-elements-in-one-data[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия