Python Pandas Klucze Obce

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

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:

a=X.merge(Y,on='ZamowienieID ',how='inner')
tab=[]
for i in x['IDPrzedmiotu1']:
    if i in x['WysokośćRabatu']:
        tab.append('1')
print(len(tab))
0
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

0
a=data['ZammowienieX'].value_counts()
b=data['ZamowienieY'].value_counts()
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ść

0

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

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

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:

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

0

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

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

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?

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

0

(pseudokod)

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1