Mam dwie pandas
ramki danych a
i b
:
a1 a2 a3 a4 a5 a6 a7
1 3 4 5 3 4 5
0 2 0 3 0 2 1
2 5 6 5 2 1 2
i
b1 b2 b3 b4 b5 b6 b7
3 5 4 5 1 4 3
0 1 2 3 0 0 2
2 2 1 5 2 6 5
Dwie ramki danych zawierają dokładnie te same dane, ale w innej kolejności i przy różnych nazwach kolumn. Na podstawie liczb w dwóch ramkach danych chciałbym móc dopasować nazwę a
każdej kolumny do nazwy każdej kolumny w b
.
Nie jest to tak proste, jak proste porównanie pierwszego wiersza a
z pierwszym wierszem, b
ponieważ istnieją zduplikowane wartości, na przykład oba a4
i a7
mają tę wartość, 5
więc nie jest możliwe natychmiastowe dopasowanie ich do jednego b2
lub drugiego b4
.
Jak najlepiej to zrobić?
python
python-3.x
pandas
OD1995
źródło
źródło
[*df1.index]
części, proszę? Będę ci wdzięczny, na zdrowie.sort_values(by=..)
bierze listę jako parametr, więc rozpakowuję tutaj indeks do listy, możesz też zrobićlist(df1.index)
zamiast[*df1.index]
:)Oto jeden ze sposobów wykorzystania numpy
broadcasting
:Inne podobne podejście (autorstwa @piR):
źródło
Jednym ze sposobów
merge
źródło
słownictwo
Użyj a
tuple
z wartości kolumny jako klucza skrótu w słownikuNa wypadek, gdybyśmy nie mieli idealnej reprezentacji, stworzyłem słownik tylko dla kolumn, w których istnieje dopasowanie.
idxmax
To graniczy z absurdem ... Nie rób tego.
źródło