Verwendung einer Schleife oder eines automatisierten Ansatzes, um alle möglichen Elemente in einem Datenrahmen basierendPython

Python-Programme
Anonymous
 Verwendung einer Schleife oder eines automatisierten Ansatzes, um alle möglichen Elemente in einem Datenrahmen basierend

Post by Anonymous »

Zusammenfassung: Ich möchte meinen SQL-Code über Python neu erstellen können, sodass ich nicht jeden Join manuell eingeben muss, wenn die Kombinationen zu groß werden, um verarbeitet zu werden.
Ich habe eine Tabelle

Code: Select all

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 unten

Code: Select all

| 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     |
Angenommen, alle Artikel sind pro Geschäft einzigartig, sodass Geschäft A nur ein rotes Auto hat, Geschäft B jedoch auch ein rotes Auto haben kann. Ich möchte in der Lage sein, das neueste neue_Element basierend auf dem maximalen Änderungsdatum und das erste vorherige_Element basierend auf dem minimalen Änderungsdatum abzurufen, bis alle Elemente zurückverfolgt sind.
Die gewünschte Ausgabe ist, dass sich ein rotes Auto mit einem grünen Auto verbindet, ein rotes Boot mit einem grünen Boot, ein rotes Fahrrad mit einem grünen Fahrrad und rotes Flugzeug mit gelbem Flugzeug, da sich zuerst gelbes Flugzeug mit grünem Flugzeug und dann grünes Flugzeug mit rotem Flugzeug verbindet
Gewünscht Ausgabe

Code: Select all

| 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           |
Ich kann dies derzeit über SQL (Redshift) tun, aber das Problem ist, dass dies schnell nicht mehr skalierbar wird, wenn es mehr als einen Join gibt oder wenn die Anzahl der benötigten Joins nicht bekannt ist, sodass der Code jedes Mal manuell aktualisiert werden muss, d. h. im Dezember 2025 ist es ein Join, aber im Januar 2026 können es zwei Joins sein

Code: Select all

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
;

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post