To jest trochę trudne do wytłumaczenia, ale spróbuję jak najlepiej. To, co mam teraz, to dwie tablice, które muszę połączyć, ale tak naprawdę nie mamy unikalnego identyfikatora join. Mam kilka kolumn do przyłączenia się, co jest najlepsze, co mogę zrobić, i chcę tylko wiedzieć, kiedy nie mamy równych liczb po obu stronach złączeń. Teraz, jeśli właściwa tabela ma 1 pasującą do 2 pozycji na lewej tabeli, to 1 dopasowanie łączy się z obydwoma wpisami. To sprawia, że nie wiem, że właściwa tabela ma tylko jedno wejście w stosunku do 2 po lewej.Pandy dołączane bez wymiany
To, czego chcę, to dołączenie do prawej tabeli po lewej stronie (na zewnątrz), ale nie chcę dołączać do właściwej tabeli więcej niż raz na pozycję. Więc jeśli prawy indeks tabeli 3 może być połączony na indeksie 1 i 2 po lewej stronie, chcę tylko, aby był połączony na indeksie 1. Również, jeśli indeks 3 i indeks 4 mogą być połączone na indeksie 1 i 2, chcę indeks 1 do dopasowania do indeksu 3, a indeksu 2 do indeksu 4. Jeśli jest tylko 1 mecz (indeks 1 -> 3), ale indeks 2 na lewej tabeli można dopasować do indeksu 3, chcę indeks 2, aby się nie połączyć.
Przykładami mogą najlepiej opisują to:
a_df = pd.DataFrame.from_dict({1: {'match_id': 2, 'uniq_id': 1}, 2: {'match_id': 2, 'uniq_id': 2}}, orient='index')
In [99]: a_df
Out[99]:
match_id uniq_id
1 2 1
2 2 2
In [100]: b_df = pd.DataFrame.from_dict({3: {'match_id': 2, 'uniq_id': 3}, 4: {'match_id': 2, 'uniq_id': 4}}, orient='index')
In [101]: b_df
Out[101]:
match_id uniq_id
3 2 3
4 2 4
W tym przykładzie chcę a_df dołączyć na b_df. Chcę b_df uniq_id 3, należy dostosować do a_df uniq_id 1 i b_df 4 do a_df 2.
wyjście będzie wyglądać następująco:
Out[106]:
match_id_right match_id uniq_id uniq_id_right
1 2 2 1 3
2 2 2 2 4
Teraz powiedzmy, że chcemy dołączyć a_df do c_df:
In [104]: c_df = pd.DataFrame.from_dict({3: {'match_id': 2, 'uniq_id': 3}, 4: {'match_id': 3, 'uniq_id': 4}}, orient='index')
In [105]: c_df
Out[105]:
match_id uniq_id
3 2 3
4 3 4
W tym przypadku mamy match_ids of 2 na a_df i tylko 1 match_id of 2 na c_df.
W tym przypadku po prostu chcę uniq_id 1, należy dostosować do uniq_id 3, pozostawiając zarówno uniq_id 2 i 4 uniq_id być niedopasowane
match_id_right match_id uniq_id uniq_id_right
1 2 2 1 3
2 NaN 2 2 NaN
4 3 NaN NaN 4
Czy możesz podać kod dla tego przykładu? –