Python Pandas Klucze Obce

Python Pandas Klucze Obce
PH
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 3 lata
  • Postów:121
0

Cześć,

Mam taki proble, a raczej pytanie . Jak pracować w Pandasie z kluczami obcymi , mam zadanie króre polega na policzeniu produktów które były kupowane z jakąś zniżką .

Tabela X Tabela Y
ZamowienieID Primary Key ZamowienieID PrimaryKey
Klient IDPrzedmiotu1 (posiada klucz obcy do tabeli X ZamowienieID)
DataZamowienia IDPrzedmiotu2 (posiada klucz obcy do tabeli X ZamowienieID)
WysokośćRabatu IDPrzedmiotu3 (posiada klucz obcy do tabeli X ZamowienieID)

I moje pytanie brzmi jak w pandasie skorelować to aby policzył dla każdego IDPrzedmiot1, IDPrzedmiot2, IDPrzedmio3 ile razy dany przedmiot był kupowany z Rabatem.

Połączyłem te tabelki pd.concat

edytowany 1x, ostatnio: printHello
PH
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 3 lata
  • Postów:121
0

Nie jestem pewien czy to ma jakiś związek z kluczami połaczyłem w ten sposób i teraz się główkuje jak przeiterować aby dla każdego przedmiotu policzył ile razy dany przedmio miał jakiś rabat:

Kopiuj
a=X.merge(Y,on='ZamowienieID ',how='inner')
Kopiuj
tab=[]
for i in x['IDPrzedmiotu1']:
    if i in x['WysokośćRabatu']:
        tab.append('1')
print(len(tab))
edytowany 5x, ostatnio: printHello
PH
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 3 lata
  • Postów:121
0
Kopiuj
data=pd.concat([TabelaX,TabelaY],axis=1,join='inner')
data

Teraz myślę aby zrobić coś takiego :

Mam dwie tabelki OrderID w tabeli X i orderID w tabeli Y . Gdy ten warunek będzie prawdziwy , to zlicza i jakoś sumuje który z przedmiotów

PH
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 3 lata
  • Postów:121
0
Kopiuj
a=data['ZammowienieX'].value_counts()
b=data['ZamowienieY'].value_counts()
Kopiuj
z=0
for i in a:
    if i==b:
        z=z+1
        print(z)

to też nie działa . Macie może pomysł jak ten temat ugryźć?

Rozwiązanie jest zapewne trywialne, ale nie mogę na nie wpaść

edytowany 3x, ostatnio: printHello
PH
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 3 lata
  • Postów:121
0

Czy ktoś z was ma pomysł jak to ugryźć , na razie kręce się w kółko bez skutku

Kopiuj
c=data['Przedmiot1'].value_counts()
c[c>0].sum()

d=data['WysokośćRabatu'].count()
d

Jak teraz przyrównać do siebie Przedmiot1 czy ma jakąś WysokośćRabatu czy nie

edytowany 1x, ostatnio: printHello
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:39 minut
0

I moje pytanie brzmi jak w pandasie skorelować to aby policzył dla każdego IDPrzedmiot1, IDPrzedmiot2, IDPrzedmio3 ile razy dany przedmiot był kupowany z Rabatem.

Nie mam bladego pojecia jak sie uzywa pandas ale w SQL bym to zrobil jakos tak:

Kopiuj
SELECT itemId, count(orders.id)
FROM orders
WHERE discount > 0
GROUP BY itemId

+- syntax

Edit: no i wychodzi na to, ze tutaj orders reprezentuje juz zjoinowana tabele


λλλ
edytowany 3x, ostatnio: stivens
PH
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 3 lata
  • Postów:121
0

W SQL to bez problemu , ale tutaj to się motam z tym już jakiś czas

PH
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 3 lata
  • Postów:121
0

w SQL JOIN-a bym potrzebował , ale tutaj w tym przypadku nie wiem.

Gdybym trzymał to w bazie danych miałbym doczynienia z jedną tabelą zawierającą ZamówieniaPrzedmiotu (powyżej jest oznaczona jako tabelaY) , oraz z drugą tabelą zawierajacą Informację o zamówieniu (u mnie oznaczona jako tabela X). W tabeli Y IDPrzedmitów są kluczami obcymi pobranymi z tabeli X

edytowany 1x, ostatnio: printHello
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:39 minut
0

Ahhhh, zaraz. Jak rozumiem to nie jest blad w wizualicji tylko masz cos takiego, ze masz id zamowienia i X slotow na id przedmiotow?
A co jak klient chce kupic wiecej przedmiotow niz design bazy przewiduje? Nie lepiej liste przedmiotow trzymac w formacie JSON/array czy cos?


λλλ
edytowany 1x, ostatnio: stivens
PH
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 3 lata
  • Postów:121
0
stivens napisał(a):

Ahhhh, zaraz. Jak rozumiem to nie jest blad w wizualicji tylko masz cos takiego, ze masz id zamowienia i X slotow na id przedmiotow?
A co jak klient chce kupic wiecej przedmiotow niz design bazy przewiduje? Nie lepiej liste przedmiotow trzymac w formacie JSON czy cos?

Może być zamówionych kilka przedmiotów z danym kluczem z tabeli X np:

ZamowienieID :1
Klient : Kowalski
DataZamowienia :12122014
WysokośćRabatu:50%

ZamowienieID :1
IDPrzedmiotu1 :1
IDPrzedmiotu2 :1
IDPrzedmiotu3 :1

Właścicielem tych przedmiotów jest Kowalski , który je kupił w dniu 12122014 z rabatem 50%

Jak jakiś przedmiot nie zostanie zakupiony ma wartość NaN.

Ja mam to zadanko z ksiązki o DS . Mam te dane w pliku .csv

edytowany 1x, ostatnio: printHello
stivens
chodzilo mi o to, ze w klient w jednym zamowieniu moze zamowic maksymalnie 3 przedmioty co jest dosyc slabe. Nawet jakbys narobil 100 takich "IDPrzedmiotu" to wciaz bardzo slaby design
PH
Tak , zdaję sobie z tego sprawę to zadanie mam z książki , to nie jest produkcyjna baza danych :)
stivens
Jesli zdajesz sobie z tego sprawe to okey :)
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:39 minut
0

(pseudokod)

Kopiuj
Z = join(X, y)
for row in Z:
    if row.discount > 0:
        for i in range(nItems):
            dict[ row['item' +  i + 'Id'] ]++

λλλ
edytowany 2x, ostatnio: stivens

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.